Flash脚本实例《打字》制作教程
作者:TeliuTe 来源:基础教程网
九、输入代码 返回目录 下一课
这一课我们来设计输入框的代码,下面我们来看一个练习;
1、启动计时器
1)首先在代码图层的第二帧,插入一个空白关键帧,其他层插入帧,在代码图层的第二帧里输入代码;
2)输入下面的代码,启动定时器;
stop();//停在这一帧上
intervalId = setInterval(this, "CounTime", 1000);//定时器,每隔一秒调用 CounTime函数
2、加载篇章字符串
1)切割好的字符串,存放在数组中,按照数组的规律,每次加载3行;
if (strAll_array.length > (intPage*3+0))//开始页数为0,数组从0开始计数小段
{
lb1_txt.text = strAll_array[intPage*3+0];
//加载第一段;
}
if (strAll_array.length > (intPage*3+1))
{
lb2_txt.text = strAll_array[intPage*3+1];
//加载第二段;
}
if (strAll_array.length > (intPage*3+2))
{
lb3_txt.text = strAll_array[intPage*3+2];
//加载第三段;
}
2)加载完成后,把光标定在第一行输入框,准备输入,继续输入下面的代码;
//把输入焦点给第一个输入文本框
in1_txt.type ="input";
in1_txt.focusEnabled = true;
Selection.setFocus(in1_txt);
in2_txt.type ="dynamic"; //先锁定下面两个
in3_txt.type ="dynamic";
3、输入框代码
1)从第一个输入框开始,分别输入各自代码,统计各个输入框,继续输入下面的代码;
//*******************************************************
//有字符输入,输入框1内容改变
//*******************************************************
in1_txt.onChanged = function(textfield_txt:TextField)
{
//“输入”的总数, 前面输入的字符总数加上现在这一行里的
strInTotal = String(intInTotal +
in1_txt.length); //换成字符形式
intlb = lb1_txt.length; //标签里的字符数,最后一行可能小于40
intIn = in1_txt.text.length;
//输入框的文本长度,存一下用着方便
inA_txt = in1_txt.text.substr(-1,1); //取出输入框的最后一个字符
lbA_txt = lb1_txt.text.charAt(intIn - 1); //从0开始计算
if (err1_txt._visible) //错误标志先不可见
{
err1_txt._visible = false;
}
//正误判断,比一下同一个字符是否相同
if (inA_txt != lbA_txt) //如果输入的字母跟标签上不同,并且不是退格键
{
err1_txt._visible = true;//显示错误标志
if (intTmp < intIn)
//正常情况下是小于,还没有赋值给 intTmp
{
intErr =
intErr + 1; //错误数加一
strErrTotal =
String(intErr); //显示失误的字符数
}
if (intErr > (intAll *
0.33)) //1/3的错误
{
clearInterval(intervalId);//定时器关闭
lb1_txt.text
=("false.");
in1_txt.type ="dynamic"; //锁定不允许输入了
}
}//end if !=, 结束正误判断
intTmp = intIn;//输入正确的话,Tmp 的值一直跟着 In1 往前走
//按退格键的话,Tmp
的值会大于 In1 的值
//检查是否换行,若是就锁定本行
if (intIn == intlb) //已经输完全部字符
{
intInTotal = intInTotal +
in1_txt.length; //总共输入的是前面的加这一行的;
intTmp = 0; //初始化给下一个用
err1_txt._visible =
false;//取消错误标志
in1_txt.type ="dynamic";
//改为动态,锁定不让输入了;
//第二个准备输入,把输入焦点给第二个输入文本框
if (lb2_txt.text != "") //还有字符
{
in2_txt.type
="input"; //改为输入
in2_txt.focusEnabled = true;
Selection.setFocus(in2_txt);
}
else //输完了
{
clearInterval(intervalId);//定时器关闭
in1_txt.type ="dynamic";//改为动态,锁定不让输入了;
}
}//已经输完
}; //end in1_txt.onChanged
2)第二个输入框的代码,跟第一个相同,继续输入下面的代码;
//*******************************************************
//第2个输入框
//*******************************************************
in2_txt.onChanged = function(textfield_txt:TextField)
{
//已经输入的总数,前面输入的加这一行的
strInTotal = String(intInTotal + in2_txt.length);
intlb = lb2_txt.length; //标签里的字符数,最后一行可能小于40
intIn = in2_txt.text.length;
//输入框的文本长度,存一下用着方便
inA_txt = in2_txt.text.substr(-1,1); //取出最后一个字符
lbA_txt = lb2_txt.text.charAt(intIn-1);
if (err2_txt._visible) //错误标志先不可见
{
err2_txt._visible = false;
}
//找出标签里的同一个字符,比一下是否相同
if (inA_txt != lbA_txt) //如果输入的字母跟标签上不同,并且不是退格键
{
err2_txt._visible = true;//显示错误标志
if (intTmp < intIn)
//正常情况下是小于,还没有赋值给 intTmp
{
intErr =
intErr + 1; //错误数加一
strErrTotal =
String(intErr); //显示失误的字符数
}
if (intErr > (intAll *
0.33)) //1/3的错误
{
clearInterval(intervalId);//定时器关闭
lb2_txt.text
=("false.");
in2_txt.type ="dynamic"; //锁定不允许输入了
}
}//end if !=, 结束正误判断
intTmp = intIn;//输入正确的话,Tmp 的值一直跟着 In1 往前走
//按退格键的话,Tmp
的值会大于 In1 的值
//检查是否换行,锁定本行
if (intIn == intlb) //比一下是否已经数完全部字符
{
intInTotal = intInTotal +
in2_txt.length; //总共输入的是前面的加这一行又输入的;
in2_txt.type ="dynamic";
//改为动态,锁定不让输入了;
intTmp = 0; //初始化给下一个用
err2_txt._visible =
false;//取消错误标志
//把输入焦点给第三个输入文本框
if (lb3_txt.text != "") //还有字符
{
in3_txt.type
="input"; //改为输入,准备输入
in3_txt.focusEnabled = true;
Selection.setFocus(in3_txt);
}
else //输完了已经
{
clearInterval(intervalId);//定时器关闭
in2_txt.type ="dynamic";//改为动态,锁定不让输入了;
}
}
}; //end in2_txt.onChanged
3)第三个输入框的代码,跟第一个相似,多了一个翻页动作,继续输入下面的代码;
//*******************************************************
//第3个输入框
//*******************************************************
in3_txt.onChanged = function(textfield_txt:TextField)
{
//已经输入的总数,前面输入的加这一行的
strInTotal = String(intInTotal + in3_txt.length);
intlb = lb3_txt.length; //标签里的字符数,最后一行可能小于40
intIn = in3_txt.text.length;
//输入框的文本长度,存一下用着方便
inA_txt = in3_txt.text.substr(-1,1); //取出最后一个字符
lbA_txt = lb3_txt.text .charAt(intIn-1);
if (err3_txt._visible) //错误标志先不可见
{
err3_txt._visible = false;
}
//找出标签里的同一个字符,比一下是否相同
if (inA_txt != lbA_txt) //如果输入的字母跟标签上不同,并且不是退格键
{
err3_txt._visible = true;//显示错误标志
if (intTmp < intIn)
//正常情况下是小于,还没有赋值给 intTmp
{
intErr =
intErr + 1; //错误数加一
strErrTotal =
String(intErr); //显示失误的字符数
}
if (intErr > (intAll *
0.33)) //1/3的错误
{
clearInterval(intervalId);//定时器关闭
lb3_txt.text
=("false.");
in3_txt.type ="dynamic"; //锁定不允许输入了
}
}//end if !=, 结束正误判断
intTmp = intIn;//输入正确的话,Tmp 的值一直跟着 In1 往前走
//按退格键的话,Tmp
的值会大于 In1 的值
//检查是否换行,锁定本行
if (intIn == intlb) //已经输完全部字符
{
intInTotal = intInTotal +
in3_txt.length; //总共输入的是前面的加这一行的;
in3_txt.type ="dynamic";
//改为动态,锁定不让输入了;
intTmp = 0; //初始化给下一个用
err3_txt._visible =
false;//取消错误标志
if (intAll > intInTotal)
//还没输完
{
intPage =
intPage + 1;//下一页了
lb1_txt.text =
lb2_txt.text = lb3_txt.text = "";
if
(strAll_array.length > (intPage*3+0))
{
lb1_txt.text = strAll_array[intPage+0]; //加载第一段;
}
if
(strAll_array.length > (intPage*3+1))
{
lb2_txt.text = strAll_array[intPage*3+1]; //加载第二段;
}
if
(strAll_array.length > (intPage*3+2))
{
lb3_txt.text = strAll_array[intPage*3+2]; //加载第三段;
}
//清空原来的输入文本框
in1_txt.text
="";
in2_txt.text
="";
in3_txt.text
="";
//把输入焦点给第一个输入文本框
in1_txt.type
="input";
in1_txt.focusEnabled = true;
Selection.setFocus(in1_txt);
}
else//输完了
{
clearInterval(intervalId);//定时器关闭
in3_txt.type ="dynamic";//改为动态,锁定不让输入了;
}//end if (intAll >
intInTotal) 还没输完
}//end if (intIn == intlb)
}; //end in3_txt.onChanged
本节学习了输入框代码设计,如果你成功地完成了练习,请继续学习下一课内容;
返回目录 下一课
本教程由86团学校TeliuTe制作|著作权所有
基础教程网:http://teliute.org/
美丽的校园……
转载和引用本站内容,请保留作者和本站链接。