AS文本计算器
通过这个实例顺便介绍一下定义函数在程序中的应用,及代码的优化过程
思路:
1.用AS创建四个文本框第一个用于输入数字,第二个用于输入运算符,第三个还用于输入数字,最后一个用于输出结果。
2.设置一个按钮(count_btn),按下后跟据第二个文本框给出的运算符将第一个和第三个文本内容进行运算,并在最后一个文本框内输出。
3.第一个文本框名为"in1"
第二个文本框名为"sign"
第三个文本框名为"in2"
第四个文本框名为"out"
可执行程序一:
var t_f:TextFormat = new TextFormat();
t_f.size = 20;
//设置文本格式中的字体为20
//================设置第一个文本框====================
_root.createTextField("in1", 1, 25, 50, 150, 25);
//创建一个文本框,注意再往下的文本框Y坐标是递增的
in1.setNewTextFormat(t_f);
//将设置好的文本格式赋给该文本框
in1.type =
"input";
//设置文本框类型为输入
in1.background = true;
//文本框有背景色
in1.backgroundColor =
0xffffff;
//背景色为白色
in1.border = true;
//文本框有边框
in1.borderColor = 0x0;
//边框颜色为黑色
in1.maxChars =
7;
//文本框中字符最大为7个
in1.restrict =
"0-9";
//文本框中允许输入的字符集为0到9
//============设置第二个文本框(基本同上)==============
_root.createTextField("sign", 2, 25, 80, 150, 25);
sign.setNewTextFormat(t_f);
sign.type = "input";
sign.background = true;
sign.backgroundColor = 0xffffff;
sign.border = true;
sign.borderColor = 0x0;
sign.maxChars = 1;
sign.restrict =
"+*/\\-";
//============设置第三个文本框(基本同上)==============
_root.createTextField("in2", 3, 25, 110, 150, 25);
in2.setNewTextFormat(t_f);
in2.type = "input";
in2.background = true;
in2.backgroundColor = 0xffffff;
in2.border = true;
in2.borderColor = 0x0;
in2.restrict = "0-9";
in2.maxChars =
7;
//==============设置第四个输出文本框===============
_root.createTextField("out", 4, 25, 165, 150, 25);
out.setNewTextFormat(t_f);
out.type = "dynamic";
out.background = true;
out.backgroundColor = 0xffffff;
out.border = true;
out.borderColor =
0x0;
//================按钮按下后进行计算================
count_btn.onRelease = function() {
if (sign.text == "+") {
out.text =
int(in1.text)+int(in2.text);
}
if (sign.text == "-") {
out.text =
int(in1.text)-int(in2.text);
}
if (sign.text == "*") {
out.text =
int(in1.text)*int(in2.text);
}
if (sign.text == "/") {
out.text =
int(in1.text)/int(in2.text);
}
};
在这个程序中的们看到对于文本框属性的设置重复了多次,为了精简代码我们考虑使用函数来解决代码的重用问题,请看第二段程序
可执行程序二:
var t_f:TextFormat = new TextFormat();
t_f.size = 20;
function F(txt) {
txt.setNewTextFormat(t_f);
txt.background = true;
txt.backgroundColor = 0xffffff;
txt.border = true;
txt.borderColor = 0x0;
txt.type = "input";
if (txt == sign) {
txt.maxChars = 1;
txt.restrict = "+*/\\-";
}
if (txt == out) {
txt.type = "dynamic";
}
if (txt == in1 || txt == in2) {
txt.maxChars = 7;
txt.restrict = "0-9";
}
}
_root.createTextField("in1", 1, 25, 50, 150,
25);
F(in1);
_root.createTextField("sign", 2, 25, 80, 150, 25);
F(sign);
_root.createTextField("in2", 3, 25, 110, 150,
25);
F(in2);
_root.createTextField("out",
4, 25, 165, 150, 25);
F(out);
count_btn.onRelease = function() {
if (sign.text == "+") {
out.text =
int(in1.text)+int(in2.text);
}
if (sign.text == "-") {
out.text =
int(in1.text)-int(in2.text);
}
if (sign.text == "*") {
out.text =
int(in1.text)*int(in2.text);
}
if (sign.text == "/") {
out.text =
int(in1.text)/int(in2.text);
}
};
//在这段程序中我们通过调用函数来设置属性,属性相同的地方写在函数的最开始,不同的地方用if语句进行判断后再赋予
最后我们再优化一下代码:使用with语句,批量设置属性,再将按钮中的if改为switch使他的结构更加清晰,可读性更好:
可执行程序三:
var t_f:TextFormat = new TextFormat();
t_f.size = 20;
function F(txt) {
with
(txt) {
setNewTextFormat(t_f);
background = true;
backgroundColor =
0xffffff;
border = true;
borderColor = 0x0;
}
if (txt == sign)
{
with
(txt)
{
type
= "input";
maxChars =
1;
restrict =
"+*/\\-";
}
}
if (txt == out)
{
txt.type
= "dynamic";
}
if (txt == in1 || txt == in2) {
with
(txt) {
type =
"input";
maxChars =
7;
restrict =
"0-9";
}
}
}
_root.createTextField("in1", 1, 25, 50, 150, 25);
F(in1);
_root.createTextField("sign", 2, 25, 80, 150, 25);
F(sign);
_root.createTextField("in2", 3, 25, 110, 150, 25);
F(in2);
_root.createTextField("out", 4, 25, 165, 150, 25);
F(out);
count_btn.onRelease = function()
{
switch (sign.text)
{
case "+" :
out.text =
int(in1.text)+int(in2.text);
break;
case "-" :
out.text =
int(in1.text)-int(in2.text);
break;
case "*" :
out.text =
int(in1.text)*int(in2.text);
break;
case "/" :
out.text =
int(in1.text)/int(in2.text);
break;
}
};
//好了到这里就完成了代码的由繁到简的优化,希望同学们在今后的实践中加深领悟。
FLASH充电1: TextField
常用属性及事件处理函数
常用属性:
1.createTextField("实例名", 深度, x坐标, y坐标, 宽度,
高度)
用来创建一个文本框。
例:createTextField("txt", 1, 10, 20, 100, 100);
2.autoSize:控制文本字段的自动大小调整和对齐。
autoSize 的可接受值为 "none"(默认值)、"left"、"right" 和
"center"。当您设置 autoSize 属性时,true 是 "left" 的同义词,false
是 "none" 的同义词。
注意:当txt.autoSize = true 时,表示自动匹配尺寸
这时createTextField("txt", 1, 10, 20, 0, 0)宽和高可以为0
3.background:指定文本字段是否具有背景填充;
backgroundColor:文本字段背景的颜色。
注意:这两句要配合使用:
例如:txt.background = true;
txt.backgroundColor = 0xff0000;
4.border:指定文本字段是否具有边框。
borderColor:文本字段边框的颜色。
注意:这两句一般要配合使用:
例如:txt.border = true;
txt.borderColor = 0x0;
5.selectable:一个布尔值,指示文本字段是否可选。
例如:txt.selectable=false 表示txt文本字段可选。
6.textColor:指示文本字段中文本的颜色。
例如:txt.textColor = 0xFF0000;
7.type:指定文本字段的类型。
有两种值:
"dynamic":指定不能由用户对其进行编辑的动态文本字段;
"input":指定输入文本字段。
例如: txt.type = "dynamic" 指定txt的类型为动态文本;
txt.type = "input" 指定txt的类型为输入文本。
8.wordWrap:一个布尔值,指示文本字段是否自动换行。
例如:txt.wordWrap = true 表示自动换行。
9.multiline:指示文本字段是否为多行文本字段。
例如:txt.multiline = true 表示txt文本框为多行。
10.hscroll:指示当前水平滚动位置。
注意:在txt为单行不换行的情况下
一般在按钮中写入:txt.hscroll+=5。
scroll:文指示当前垂直滚动位置(与hscroll相对)。
注意:在txt为多行且换行的情况下
一般在按钮中写入:txt.scroll+=5。
11.maxChars:指示文本字段最多可容纳的字符数。
例如:txt.maxChars = 7 表示txt最多容纳7个字符。
12.password:指定文本字段是否是密码文本字段。
例如:txt.password = true 表示txt中的字段以密码形式出现。
13.restrict:约束用户可输入到文本字段中的字符集。
例如:
<1>仅允许在文本字段中输入大写字符、空格和数字:
txt.restrict = "A-Z 0-9";
<2>包含除小写字母之外的所有字符:
txt.restrict = "^a-z";
<3>可以使用反斜杠输入 ^ 或 -
的本义。认可的反斜杠序列为 \-、\^ 或
\\。反斜杠在字符串中必须是一个本义字符,因此在
AS中指定时必须使用两个反斜杠。下面的代码只包含 - 和 ^ :
txt.restrict = "\\-\\^";
<4>可在字符串中的任何地方使用
^,以在包含字符与排除字符之间进行切换。包含除大写字母 Q
之外的大写字母:
txt.restrict = "A-Z^Q";
常用事件处理函数:
1.TextField.onChanged = function(){}
在文本字段的内容发生更改时调用函数。
例如:只要文本框内的段发生变化就输出文本内容
_root.createTextField("txt", 99, 10, 10, 300, 20);
txt.border = true;
txt.type = "input";
txt.onChanged = function() {
trace(txt.text);
};
2.TextField.onKillFocus = function()
{}
在文本字段失去键盘焦点时调用函数。
例如:在文本框失去焦点时,输出文本内容
_root.createTextField("txt", 99, 10, 10, 300, 20);
txt.border = true;
txt.type = "input";
txt.onKillFocus = function() {
trace(txt.text);
};
3.TextField.onSetFocus = function()
{}
在文本字段接收键盘焦点时调用函数。
例如:在文本框接收到焦点时,清空文本内容
_root.createTextField("txt", 99, 10, 10, 300, 20);
txt.border = true;
txt.type = "input";
txt.onSetFocus = function() {
txt.text = "";
};
重要方法:
setNewTextFormat:设置文本字段的默认新文本格式。
例如:
var t_f:TextFormat = new TextFormat();
t_f.bold = true;
t_f.font = "Arial";
this.createTextField("txt", 1, 40, 10, 70, 20);
txt.border = true;
txt.setNewTextFormat(t_f);
txt.text = "Hello World!";
FLASH充电2: TextFormat 常用属性简介
1.var t_f:TextFormat = new TextFormat();
申请一个TextFormat对象并实例化。
2.TextFormat.align:段落的对齐方式
"left"--左对齐。
"center"--居中。
"right"--右对齐。
"justify"--两端对齐。
例: t_f.align = "center"
3.TextFormat.bold:指示文本是否为粗体字。
例: t_f.bold = true
4.TextFormat.color:指示文本的颜色。
例: t_f.color = 0xff0000
5.TextFormat.font:文本的字体名称,以字符串形式表示。
例:
t_f.font = "黑体"
6.TextFormat.italic:指示使用此文本格式的文本是否为斜体。
例: t_f.font = true
7.TextFormat.underline:指示使用此文本格式的文本是否有下划线。
例: t_f.underline = true
8.TextFormat.leftMargin:段落的左边距,以磅为单位。
例: t_f.leftMargin = 5
9.TextFormat.rightMargin:段落的右边距,以磅为单位。
例:
t_f.rightMargin = 5
10.TextFormat.size:使用此文本格式的文本的磅值。
例: t_f.size = 20
11.TextFormat.indent:指示从左边距到段落中第一个字符的缩进的整数。
例: t_f.indent = 5
12.TextFormat.url:指示使用此文本格式的文本链接所至的
URL。
补充:flash教程,Action