最后,在程序末尾增加一個【運算】設計圖標,將其命名為“下一循環”,雙擊打開該設計圖標,在【運算】窗口中輸入程序語句
goto(iconid@"繪制秒針")
當程序執行到此設計圖標時,將跳轉到“繪制秒針”設計圖標,開始下一輪繪制工作。為了使【演示】窗口中能夠時刻顯示當前的系統時間,在“time”設計圖標的屬性檢查器中打開“update displayed variables”復選框。
至此,所有設計工作全部完成,整個程序的流程如圖3-66所示。運行程序,可以看到【演示】窗口中時刻顯示出當前的系統時間,并且時鐘的表針也在根據系統時間的變化不停地走動。
由于在程序中根據表盤的位置與大小對表針的位置和長度進行了靈活地處理,因此讀者可以在“表盤”設計圖標中自由的繪制各種形狀的表盤,而不必對繪制表針的程序流程進行任何修改。chapter03文件夾下的范例程序clock2.a7p和clock3.a7p就采用了兩種其他類型的表盤,如圖3-67所示。
圖3-66 流程圖
圖3-67 clock2.a7p與clock3.a7p
在一些測驗、競賽、游戲程序中,經常需要使用計時功能,統計使用者用去的時間,或者以倒計時方式控制程序的進行過程。本例通過aws語言實現兩種計時器:正計時器顯示用戶已經用去的時間,倒計時器顯示程序給用戶留下的時間。這兩種計時器都可以非常方便地用于任何authorware程序中。本例使用了以下系統函數和變量:
(1)int(x):獲取實數x的整數部分。
(2)mod(x, y):獲取x除以y所得的余數。如果參數x和y都是整數,則余數也是整數。
systemseconds:包含計算機從啟動到目前為止所經過的時間,即系統運行時間(注意不是windows系統時間,系統時間對應于變量fulltime),以秒為單位。
與本例對應的范例程序是chapter03文件夾下的timer.a7p。
進入authorware,創建一個新的程序文件。
使用變量面板創建3個自定義變量:timecount,timestart和timeend。timecount用于設置計時過程的持續時間,以秒為單位。timestart用于保存計時過程的開始時刻。timeend用于保存計時過程的結束時刻。
向流程線上添加一個【運算】設計圖標,將其命名為“初始化”,如圖3-68所示,在這個設計圖標中,對本程序使用的自定義變量進行初始化操作。向“初始化”設計圖標中輸入以下程序語句。
圖3-68 計時過程初始化
timecount:=100 --將計時長度設置為100秒
timestart:=systemseconds --記錄當前時間,即計時過程的開始時刻
timeend:=systemseconds+timecount --計算計時過程的結束時刻
現在將倒計時過程及其顯示過程放在一起。
向流程線上添加一個【顯示】設計圖標并將其命名為“倒計時”如圖3-69所示。打開該設計圖標,利用文本工具向【演示】窗口中添加如圖所示的文本對象。
圖3-69 創建倒計時過程
文本對象的內容就是倒計時的計時過程。倒計時過程由時、分、秒三部分計算過程組成。
(1){int((timeend-systemseconds)/3600)}
計算倒計時過程的小時部分。由計時結束時間減去當前系統運行時間,得到計時過程的進行時間,再除以每小時的秒數(3600),獲得計時過程的小時部分。這一數值由整數部分和小數部分組成,因此再通過系統函數int()獲取其整數部分。
(2){int((mod(timeend-systemseconds),3600)/60)}
計算倒計時過程的分鐘部分。計時過程的進行時間除以每小時的秒數,商的余數部分就是除去小時部分之后的剩余時間,將剩余時間除以每分種的秒數(60),獲得計時過程的分鐘部分,再通過函數int()獲取其整數部分。
(3){mod(int(mod((timeend-systemseconds),3600)),60)}
計算倒計時過程的秒鐘部分。首先通過int(mod((timeend-systemseconds),3600))獲得除去小時部分之后的剩余時間的整數部分,再除以每分鐘的秒數60,獲得的余數就是倒計時過程的秒鐘部分。
在文本對象中將以上3個表達式計算結果通過“:”相連。為了使這些數值能夠即時更新,在【設計】窗口中選擇“倒計時”設計圖標,執行modify>icon>properties菜單命令,在設計圖標屬性檢查器中選擇update displayed variables選項。
在默認情況下,authorware在顯示文本對象中的數值時并不顯示前置0,即將數值1顯示為“1”,而不是“01”。在倒計時程序中,應該使時、分、秒數值以小于10時顯示前置0,即始終顯示兩位數字。雙擊“倒計時”設計圖標,打開【演示】窗口,在其中選擇包含倒計時過程的文本對象,然后執行text>number format菜單命令,打開【number format】對話框,如圖3-70所示,在【leading zero to place】屬性中,將前置0的位置設置為2。
為文本對象應用digifacewide字體,并調整其大小和位置。運行程序,此時倒計時時鐘已經可以工作了,如圖3-71所示。
圖3-70 規范時間的顯示格式 圖3-71 開始倒計時
向流程線上添加一個【顯示】設計圖標并將其命名為“正計時”。打開該設計圖標,利用文本工具向【演示】窗口中添加如圖所示的文本對象,如圖3-72所示。
圖3-72 創建正計時過程
正計時過程也是由時、分、秒三部分計算過程組成。每部分計算過程的工作原理與倒計時過程是類似的,但是需要通過systemseconds-timestart替換倒計時過程中的timeend-systemseconds。文本對象的完整內容是:
{int((systemseconds-timestart)/3600):int(mod((systemseconds-timestart),3600)/60):
mod(int(mod((systemseconds-timestart),3600)),60)}
同樣通過設計圖標屬性檢查器將“正計時”設計圖標設置為update displayed variables方式,然后按照第3個步驟中的方法,設置正計時文本對象的顯示格式,如圖3-73所示。
圖3-73 兩種計時過程同時進行
第3種計時過程由等待設計圖標進行,用于控制程序在經過100秒鐘的計時過程之后自動退出。向流程線上添加一個【等待】設計圖標和一個【運算】設計圖標,如圖3-74所示。雙擊等待設計圖標打開屬性檢查器,在其中將等待時間設置為timecount,然后打開【show countdown】復選框,即顯示authorware倒計時時鐘。
圖3-74 第3種計時過程
將運算設計圖標命名為“退出”,并向其中輸入程序語句:
quit()
程序運行時【演示】窗口中就會顯示出authorware倒計時鐘,這時可以將其拖放到窗口右下角位置。經過100秒之后,程序執行“退出”設計圖標之中的程序語句,結束程序的運行。
本例至此制作完畢。以后讀者就可以直接將包含有計時過程的【顯示】設計圖標復制到其他程序中使用。只需為自定義變量timecount賦予初始值,文本對象就能正確顯示出計時過程。由于兩種計時過程中都包含大量的運算,因此不要在同一程序中同時使用這兩種計時過程,否則可能會導致計時過程出現延遲現象。
為方便讀者進行測試,范例程序timer.a7p帶有一個輸入界面,由讀者自行設置計時長度(以秒為單位)。同時在“初始化”設計圖標中將變量timecount初始化為:
timecount:=numentry
如圖3-75所示,在文本框中輸入數值并回車之后,就可以看到兩種計時過程。
圖3-75 設置計時長度
新聞熱點
疑難解答