蔣維
摘要:該文介紹了在Flash中如何利用文本框和動作腳本實現(xiàn)隨機的加減乘除四則運算練習題,最后可統(tǒng)計出做題的時間以及查看練習結果等。
關鍵詞:Flash;文本框;動作腳本
中圖分類號:TP37 文獻標識碼:A 文章編號:1009-3044(2016)25-0056-03
Flash的動作腳本ActionScript(簡稱AS)為我們提供了各種命令,運算符以及對象,我們可以使用AS在Flash中實現(xiàn)許多交互功能。Flash中有三種文本類型:靜態(tài)文本、輸入文本和動態(tài)文本,靜態(tài)文本僅僅用于輸入需要顯示的文字,輸入文本用于數(shù)據(jù)的輸入,動態(tài)文本內(nèi)容根據(jù)AS的指示變化而變化。文本框除了利用Flash提供的文本工具創(chuàng)建外,還可以利用AS進行創(chuàng)建,利用文本工具只能在設計階段創(chuàng)建,比較直觀簡單,屬性設置可以利用屬性面板進行,利用AS可以在動作腳本運行期間動態(tài)創(chuàng)建,比較靈活,但使用的屬性設置只能通過代碼進行。本程序把創(chuàng)建文本的兩種方法相結合靈活的實現(xiàn)了練習題中的某些功能。
1 程序的設計與實現(xiàn)
1.1 程序?qū)崿F(xiàn)的目標
程序的主要目標是實現(xiàn)用戶能夠選擇做練習題的數(shù)目,程序根據(jù)用戶所選擇的練習題目數(shù)隨機的出加減乘除四則運算練習題。
1.2 程序主要的處理函數(shù)
1) Math.random()函數(shù)與Math.round()函數(shù):這兩種函數(shù)結合使用產(chǎn)生隨機的運算數(shù)。
2) addEventListener()函數(shù):此函數(shù)是偵聽器函數(shù)或事件處理函數(shù),本程序中用了addEventListener()函數(shù)的鍵盤事件處理和鼠標事件處理。
3) String ()函數(shù)與Number ()函數(shù):文本框中的數(shù)據(jù)是字符型數(shù)據(jù),進行四則運算時需要數(shù)字型數(shù)據(jù),利用這兩種函數(shù)可以實現(xiàn)數(shù)字和字符之間的轉換。
4) gotoAndStop()函數(shù)與stop ()函數(shù):本程序中stop()函數(shù)用來使Flash停留在當前幀,gotoAndStop()函數(shù)是用來跳轉到指定幀并停留在指定幀。
1.3 程序的設計
本程序共分為三個界面:在第一個界面上用戶可以輸入需要做的練習題的數(shù)目,只能輸入1-30之間的數(shù)值,輸錯會有提示,輸完題目數(shù)后,按開始答題按鈕進入第二個界面;在第二個界面上會先隨機出現(xiàn)第一道練習題,界面上方會顯示出共需要做幾道題,同時會顯示當前做的是第幾道題,當用戶輸完當前題目的計算結果按 enter鍵后,系統(tǒng)會自動隨機的出下一道任意類型的練習題,當最后一題做完后自動進入第三界面;在第三個界面上有兩個選擇按鈕,第一個按鈕是查看結果按鈕,點擊它可以查看所有做過的題目以及正誤判斷,第二個按鈕是重新做題按鈕,點擊它可以回到第一個界面重新開始做題,同時界面三上方會顯示出用戶做題所用的時間。
1.4 程序的實現(xiàn)過程
程序共分為三個界面,所以需要在新建的Flash文檔的時間軸面板的圖層1上創(chuàng)建三個關鍵幀,每一個關鍵幀實現(xiàn)一個界面的建立。
1) 界面一的建立
選中第一幀關鍵幀,在窗口舞臺上我們利用文本框和按鈕創(chuàng)建如下圖1的界面。
打開動作面板輸入以下代碼:
stop();
var N,tishi;
tishi=new TextField(); //生成文本域
tishi.defaultTextFormat = new TextFormat("黑體",20,0xff0000); //設置文本格式
tishi.x = 200; tishi.y = 200; //設置文本在舞臺上的位置
mb.addEventListener(MouseEvent.CLICK ,f1); //設置按鈕mb的鼠標偵聽事件
function f1(evt:MouseEvent)
{N = Number(shumu.text); //把輸入文本框中內(nèi)容轉成數(shù)字放入變量N
if (N>30||N==0) //輸入數(shù)字錯誤分支
{ tishi.text = "請輸入1-30之間的數(shù)字!"; tishi.autoSize = TextFieldAutoSize.CENTER;
addChild(tishi); gotoAndStop(1);}
else { tishi.text = ""; } gotoAndStop(2); } //輸入數(shù)字正確分支
2) 界面二的建立
選中第二幀關鍵幀,在窗口舞臺上利用文本框創(chuàng)建如下圖2的界面,界面上顯示的文字和符號皆由靜態(tài)文本框完成,如上述圖1。
打開動作面板輸入以下代碼:
var timestart;
var now:Date = new Date();
timestart = now.hours * 3600 + now.minutes * 60 + now.seconds; //記錄做題開始時間
var i=0,m,n,t,j = 0;
var textStr:String = "+-×÷"; //定義符號字符
txt1.text = String(Math.round(Math.random() * 100)); //隨機取初始算式的運算數(shù)1
txt2.text = String(Math.round(Math.random() * 100)); //隨機取初始算式的運算數(shù)2
fuhao.text = textStr.charAt(i); //取初始算式的運算符號
j = j + 1;
tishu.text = N; tihao.text = j; //記錄題目總數(shù)和題號數(shù)
var TextSprite:Array = new Array(); //定義數(shù)組TextSprite,用于存放做題記錄
var num = 0;
txt.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown); //設置鍵盤偵聽事件
function KeyDown(e:KeyboardEvent):void
{ if (e.keyCode == Keyboard.ENTER) //以下是按鍵盤上enter鍵所執(zhí)行的操作
{ num=Number(txt.text);
TextSprite[j-1] = new TextField(); //數(shù)組TextSprite中每一元素生成一個文本域
if((txt.text.length !=0)&&((i==0&&m+n==num)||(i==1&&m-n==num)||(i==2&&m*n==num)||(i==3&&m/n==num))) //判斷輸入內(nèi)容是否與左邊算式相等
{TextSprite[j - 1].text = txt1.text + fuhao.text + txt2.text + "=" + txt.text+" "+"√";}
//輸入結果正確記錄下當前所做題目及答案并判斷為正確
else
{TextSprite[j - 1].text = txt1.text + fuhao.text + txt2.text + "=" + txt.text+" "+"×";}
//輸入結果錯誤記錄下當前所做題目及答案并判斷為錯誤
txt.text = ""; //清除上一次輸入的答案,為下一道題做準備
m = Math.round(Math.random() * 100); //隨機取下一道題的運算數(shù)1放入變量m
n = Math.round(Math.random() * 100); //隨機取下一道題的運算數(shù)2放入變量n
i = Math.round(Math.random() * 3); //隨機取下一道題的運算符號的序號
if (m while (i==3) { if (m%n==0&&n!=0){ break; } else { m = Math.round(Math.random() * 100); n = Math.round(Math.random() *100); } }//符號為除號時除法算式應沒有余數(shù),如果取的數(shù)不滿足條件需要重新再取 txt1.text = String(m); //運算數(shù)1賦給txt1 txt2.text = String(n); //運算數(shù)2賦給txt2 fuhao.text = textStr.charAt(i); //運算符號賦給fuhao j = j + 1; tihao.text = j; //取得當前題號 if (j>N){ gotoAndStop(3); } //做完用戶輸入的題目數(shù)后轉到界面三 }} 3) 界面三的建立 選中第三幀關鍵幀,在窗口舞臺上我們利用文本框和按鈕創(chuàng)建如圖3的界面。 打開動作面板輸入以下代碼: var nowt:Date = new Date(); yongshi.text = String(nowt.hours * 3600 + nowt.minutes * 60 + nowt.seconds - timestart); mb1.addEventListener(MouseEvent.CLICK ,f3); //設置按鈕mb1的鼠標偵聽事件 function f3(evt:MouseEvent) {var d = 0; for (var k:uint=0; k { TextSprite[k].defaultTextFormat = new TextFormat("黑體",20,0xff0000); TextSprite[k].text = TextSprite[k].text; if (k%2==0){ TextSprite[k].x = mb1.x+100; TextSprite[k].y = mb1.y - 25 + d; } else{ TextSprite[k].x = mb1.x+250; TextSprite[k].y = mb1.y - 35 + d; } //if-else語句把TextSprite數(shù)組中的記錄結果分成奇偶兩列顯示 TextSprite[k].autoSize = TextFieldAutoSize.LEFT; addChild(TextSprite[k]); d = d + 10;}} mb2.addEventListener(MouseEvent.CLICK ,f2); //設置按鈕mb2的鼠標偵聽事件 function f2(evt:MouseEvent) {for (var k:uint=0; k gotoAndStop(1);} 2 結論 本文利用Flash的動作腳本實現(xiàn)了文本框交互式練習題,程序中需要注意幾點:第一,在CS3以上版本中,輸入文本框和動態(tài)文本框沒有字體只允許輸入顯示制作時輸入的數(shù)據(jù),解決辦法是嵌入字體或是在文本屬性中改為使用設備字體;第二,本程序中的輸入文本框需在屬性面板中把輸入行設為單行;第三,可以添加一些動作腳本使程序更加完善,如:txt.restrict="0-9"限制輸入文本框只能輸入數(shù)字,txt1.borderColor = 0xff0000可設置文本框的外邊框顏色,txt1.backgroundColor = 0x00FF00可設置文本框的內(nèi)部填充顏色,等等。把Flash的三種文本類型結合使用,可以制作出豐富多彩的文本框交互效果。 參考文獻: [1] 劉本軍,李登豐. Flash ActionScript 3.0互動設計項目教程[M]. 北京:人民郵電出版社,2015:11. [2] 李林. FlashCS動畫制作教程[M].北京:清華大學出版社,2014:8.