在本節中,將應用aws語言,制作一個顯示當前時間的時鐘。在開始前,先把制作過程中將要用到的系統函數和系統變量進行一下簡單的介紹。
(1)rgb(r,g,b):該函數為其他繪圖函數設置繪圖時使用的顏色。每一種顏色都是由紅、綠、藍(r,g,b)三原色混合而成,顏色分量r,g,b的取值范圍為0~255。函數rgb(255,0,0)將繪圖色設置為紅色。
(2)setframe(flag, color):設置在繪制線段或邊框時使用的顏色。參數flag為true時,繪制出的圖形帶有邊框,否則沒有邊框。如果想要以指定顏色繪制線段,則flag必須設置為true。
(3)setline(type):設置線段樣式,樣式由參數type指定:0表示無箭頭,1表示線段起點處有箭頭,2表示線段終點處有箭頭,3表示線段兩端都有箭頭。
(4)line(pensize, x1, y1, x2, y2):使用由參數pensize指定的線寬在【演示】窗口中從坐標(x1,y1)到坐標(x2,y2)繪制一條線段。線寬以像素為單位。
(5)sin(x):計算出x的正弦值。
(6)cos(x):計算出x的余弦值。
(7)min(list):計算出list列表中的最小數值。
(8)goto(iconid@"icontitle"):使程序跳轉到指定設計圖標處繼續執行。
(1)displayx:包含當前設計圖標中顯示對象的中心距離【演示】窗口左邊界的像素數,即中心點的橫坐標。使用displayx@"icontitle"返回指定設計圖標中顯示對象的中心點的橫坐標。
(2)displayy:包含當前設計圖標中顯示對象的中心距離【演示】窗口上邊界的像素數,即中心點的縱坐標。使用displayy@"icontitle"返回指定設計圖標中顯示對象的中心點的縱坐標。
(3)fulltime:包含當前的系統時間,以時、分、秒格式表示,例如1:30:55。
(4)sec:包含當前系統時間中的秒數,取值范圍為0~59。
(5)minute:包含當前系統時間中的分鐘數,取值范圍為0~59。
(6)hour:包含當前系統時間中的小時數,取值范圍為0~23。
有了上述準備知識之后,就可以開展設計工作了。首先進入authorware,建立一個新的程序文件,將【演示】窗口的大小調整到適當的尺寸,然后按照以下步驟進行操作。
與本例對應的范例程序是chapter03文件夾下的clock.a7p。
向【設計】窗口中的流程線上拖放一個顯示設計圖標,將其命名為“表盤”,如圖3-54所示,然后在“表盤”設計圖標中繪制一個圓形對象。在本例中,這個圓形對象將作為表盤使用。
向流程線上“表盤”設計圖標之后的位置拖放一個【顯示】設計圖標,將其命名為“刻度”,然后在“刻度”設計圖標中創建一系列代表時間刻度值的文本對象:從1到12。為了將時間刻度同上一步驟中創建的表盤對齊,可以在按下shift鍵的同時依次雙擊“表盤”設計圖標和“刻度”設計圖標,此時兩個設計圖標中的所有顯示對象都出現在【演示】窗口中,如圖3-55所示。把所有文本對象擺放妥當之后,將它們組合成為一個顯示對象,這樣就使文本對象之間的相對位置不再發生變化。
圖3-54 繪制表盤
圖3-55 繪制刻度
使用變量面板創建5個自定義變量: r_sec,r_min,r_hou,timeslice和span。變量r_sec、r_min和r_hou分別用于設置秒針、分針和時針的長度,由于表針走動的過程其實是以表針長度為半徑畫圓的過程,因此這三個變量的名稱以半徑的縮寫“r”開頭,其值可以看成是畫圓時采用的半徑。變量timeslice表示每經過1秒鐘秒針轉動的角度,以弧度為單位。變量span表示表針與水平方向的夾角,以弧度為單位。
向流程線上“刻度”設計圖標之后的位置拖放一個【運算】設計圖標,將其命名為“變量初始化”,在這個設計圖標中,將對本程序使用的自定義變量進行初始化操作。向“變量初始化”設計圖標中輸入如圖3-56所示的程序語句,其中:
timeslice:=2*pi/60
表示秒針轉動一次的弧度是2*pi/60,這是因為秒針轉動一周(經過2*pi弧度)需要擺動60次。表達式displaywidth@"表盤"和displayheight@"表盤"分別計算出表盤的高度和寬度,程序語句:
r_sec:=min(displaywidth@"表盤", displayheight@"表盤")/2
將秒針的長度設置為與表盤較短軸的半徑相等(因為很可能繪制出的圓形是一個橢圓)。
圖3-56 初始化變量
在這一步驟中將使用畫線函數繪制一個紅色的秒針,而且秒針的方向應該與當前的時間相吻合。
向流程線上“變量初始化”設計圖標之后的位置拖放一個【運算】設計圖標,將其命名為“繪制秒針”,如圖3-57所示。雙擊打開該設計圖標,在【運算】窗口中輸入以下程序語句:
圖3-57 繪制秒針
setframe( 1, rgb(255,0,0) ) --設置線段為紅色
setline(0) --設置線段為無箭頭樣式
span:=(sec-15) * timeslice --計算秒針與水平方向的夾角。
line(1, displayx@"表盤", displayy@"表盤", r_sec * cos(span) +﹁
displayx@"表盤", r_sec * sin(span) + displayy@"表盤")
在上述代碼中,程序語句
setframe(1, rgb(255, 0, 0 ) )
setline(0)
后第3行程序語句計算當前秒針的方向,由于秒針從0位置起要經過15秒鐘才能到達水平方向,因此必須從當前秒數中減去15再同變量timeslice相乘,算出秒針與水平方向的夾角。在繪制秒針之前,必須計算出線段的起點坐標和終點坐標,線段的起點坐標很明顯就是表盤的中心,即(displayx@"表盤", displayy@"表盤"),而終點坐標可以根據秒針的長度和方向計算出來,即(r_sec * cos(span) + displayx@"表盤", r_sec * sin(span) + displayy@"表盤")。最后,使用畫線函數繪制一條1像素寬的線段。
在工具欄中單擊【運行】按鈕,此時程序運行結果如圖3-58所示。可以對照當前系統時間看一看秒針指示的時間是否正確。
由圖中可以看出,秒針的指向、顏色都符合要求,但是長度有些過長,幾乎超出了表盤的范圍。雙擊打開流程線上的“變量初始化”設計圖標,對秒針的長度進行修改,同時對分針和時針的長度進行設置,如圖3-59所示。分別將秒針的長度設置為比表盤的短軸半徑短10個像素,分針的長度比秒針的長度短10個像素,且時針的長度比分針的長度短10個像素。表針的長度可以根據表盤的大小進行調整,只要能夠明顯區分出秒針、分針、時針即可。
圖3-59 設置表針的長度
向流程線上“繪制秒針”設計圖標之后的位置拖放一個[運算]設計圖標,將其命名為“繪制分針”,如圖3-60所示。雙擊打開該設計圖標,在【運算】窗口中輸入以下程序語句:
setframe(1, rgb(0,0,255 ) )
setline(2)
span:=(minute-15) * timeslice
line(2, displayx@"表盤", displayy@"表盤", r_min * cos(span) + ﹁
displayx@"表盤", r_min * sin(span) + displayy@"表盤")
這些程序語句將分針設置為藍色、末端帶箭頭的樣式,寬度為2個像素,并指向與系統變量minute對應的時鐘刻度。
圖3-60 繪制分針
向流程線上“繪制分針”設計圖標之后的位置拖放一個【運算】設計圖標,將其命名為“繪制時針”,如圖3-61所示。雙擊打開該設計圖標,在【運算】窗口中輸入以下程序語句:
span:=((hour + (minute / 60)) * 5 - 15) * timeslice
line(2, displayx@"表盤", displayy@"表盤", r_hou * cos(span) + ﹁
displayx@"表盤", r_hou * sin(span) + displayy@"表盤")
因為時針轉動一周表示經過12個小時,而分針轉動一周表示經過60分鐘,因此在計算時針的指向時應將當前的小時數乘以系數5。這里沒有使用函數對線段的顏色和樣式進行重新設置,因此時針仍然保持藍色,末端帶箭頭的樣式。
圖3-61 繪制時針
在流程線最前面的位置增加一個名為“time”的【顯示】設計圖標,并在其中創建一個文本對象,如圖3-62所示,在文本對象中嵌入系統變量fulltime,這樣在程序運行時,演示窗口中將以數字格式顯示出當前的系統時間。
圖3-62 顯示當前系統時間
chapter03文件夾內提供了一種數字液晶字體digifacewide.ttf。讀者可以在系統中安裝這種字體,增強時間的顯示效果。
運行程序,此時【演示】窗口中顯示出當前的系統時間,并且時鐘也指示出正確的時間,如圖3-63所示,但是這些內容并沒有隨著時間的流逝而發生改變——它們靜止在那里,僅顯示出剛才單擊運行【按鈕】那一刻的時間。
圖3-63 程序運行結果
要使時鐘真正運轉起來,不能僅僅繪制程序開始運行的時間,而是必須為每一秒鐘進行同樣的繪制工作,因此,需要在程序中設置一個循環繪制表針的過程。
循環繪制表針的過程應該是這樣的:
(1)根據當前的時間繪制表針。
(2)將繪制的內容保持1秒鐘。
(3)擦除第1步中繪制的表針,再跳轉到第1步繼續執行。
根據以上的分析,首先在“繪制時針”設計圖標之后插入一個【等待】設計圖標,將其命名為“1 sec”。打開該設計圖標,進行如圖3-64所示的設置:關閉【key press】和【show button】復選框,同時設置程序暫停時間為1秒。
然后在“1 sec”設計圖標之后插入一個【運算】設計圖標,并將其命名為“擦除表針”,如圖3-65所示,打開該設計圖標,向其中輸入以下程序語句:
圖3-64 設置時間間隔
圖3-65 擦除表針
eraseicon(@"繪制秒針") --擦除由“繪制秒針”設計圖標繪制的線段
eraseicon(@"繪制分針") --擦除由“繪制分針”設計圖標繪制的線段
eraseicon(@"繪制時針") --擦除由“繪制時針”設計圖標繪制的線段
這樣就可以將已經顯示在演示窗口中的時針、分針和秒針擦除。
新聞熱點
疑難解答