Flash脚本实例《打字》制作教程

作者:TeliuTe 来源:基础教程网

九、输入代码 返回目录 下一课

 这一课我们来设计输入框的代码,下面我们来看一个练习;

 1、启动计时器

 1)首先在代码图层的第二帧,插入一个空白关键帧,其他层插入帧,在代码图层的第二帧里输入代码;

 a1z.gif

 

 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/

美丽的校园……

转载和引用本站内容,请保留作者和本站链接。