2011-03-07 81 views
0

我試圖在Flash/ActioScript 3中製作一個骰子游戲。我做了所有必需品並且工作順利。現在我想改善用戶體驗。例如,當它輪到電腦時(我們將根據模值進行滾動和處理),我想爲模具製作動畫。該芯片有6個關鍵幀。所以,比如說,2秒鐘的死亡將循環這6幀,然後停止一個值(取決於隨機發生器)。不知何故,我無法按我的意願去做。我怎麼可以編寫一個函數(S),所以,當我說,難以理解ActionScript 3計時器類

animateDice()

它會做什麼,但只是動畫指定的時間間隔骰子?

更新:

var timer:Timer = new Timer(10, 50); 
myButton.addEventListener(MouseEvent.CLICK, onClick); 
timer.addEventListener(TimerEvent.TIMER, animateDice); 

function onClick(event: Event):void { 
    timer.start(); 
} 

function animateDice(event: Event):void { 
    dice.play(); 
} 

舉例來說,我不明白爲什麼上面的代碼不能正常工作。它可以在第一次點擊時正常工作,但不會在那之後。

更新2:我想我仍然有問題。在計時器停止之前,如何暫停運行代碼? (是的,有一個變通---把定時器處理其他計時器裏面,等有一個簡單的方法

也許,這將幫助:

首先我們看到的模具,軋件(和消息框通知用戶遊戲將決定誰開始),然後是人的或計算機的輪到,當輪到計算機時,首先我們再看到滾動死亡例如1秒,然後它停下來,並且我們看到結果。我是一個初學者,我不能錯過一些東西,但從我看到的所有這些簡單的步驟(只是顯示模具滾動一段時間)來看,意味着很多很多的線。

如果我使用一個簡單的計時器對於死亡動畫,劇本con色彩和整個表演都會消失。

回答

2

Timer對象有三個屬性:

  • delay,或事件應多久火
  • repeatCount,或事件應該有多少次火
  • currentCount,或多少次定時器事件已經發射到目前爲止

您正在創建計時器new Timer(10, 50),其中設置delay爲10,repeatCount爲50.這意味着,一旦您撥打timer.start(),計時器將每10毫秒觸發一次TimerEvent.TIMER。每次發射時,它都會加1到currentCount。當currentCount大於或等於repeatCount(50)時,它停止循環定時器。

當您的計時器停止後,如果您再次撥打timer.start(),它只會觸發一次事件,因爲currentCount尚未重置爲零,並且仍然是>= repeatCount

如果您在致電timer.start()之前致電timer.reset(),它會將此值設置爲零,並且事情應按預期行事。

+0

是的,那是我的錯誤。感謝您指出了這一點。 – blackened 2011-03-07 22:21:33

0

你可以嘗試更多的東西像這樣的小:

var t:Timer = new Timer(10, 50); 
t.addEventListener(TimerEvent.TIMER, timerHandler); 
t.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler); 
t.start(); 

function timerHandler(e:TimerEvent):void { 
    gotoRandomFrame(); 
} 

private function timerCompleteHandler(e:TimerEvent):void { 
    var finalNum:int = gotoRandomFrame(); 
    // Using finalNum 
} 

private function gotoRandomFrame():int { 
    var num:int = Math.floor(Math.random() * 6) +1; 
    dice.gotoAndStop(num); 
    return num; 
} 

因此,使用gotoAndStop設置你的框架,而不是使用播放

+0

嗯。那不是我關心的問題。不管怎麼說,還是要謝謝你。 – blackened 2011-03-07 22:19:42

1
var timer:Timer = new Timer(2000, 1); 
myButton.addEventListener(MouseEvent.CLICK, onClick); 
timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete); 

function onClick(event: Event):void { 
    timer.reset(); 
    timer.start(); 
    dice.play(); 
} 

function onTimerComplete(event:TimerEvent):void { 
    var roll:int = int(Math.floor(Math.rand()*6))+1; 
    dice.gotoAndStop(roll); 
} 

計時器設置爲只運行一次,2000年毫秒(即2秒)。當點擊發生時,定時器被重置(如果它不是第一次被點擊,它會像第一次那樣運行)並且開始,並且動畫開始良好。 2秒鐘後,TIMER_COMPLETE將被定時器觸發,我們捕獲它並確定芯片的最終數字,然後gotoAndStop到該幀。

我沒有嘗試編譯代碼,但它的要點應該爲你工作。骰子是'死'的複數:)你跳過一個很好的機會,我們都想使用的變量名稱的類型,但不能!

+0

我知道骰子是複數。不知何故,我不喜歡用「die」這個詞作爲變量名。 – blackened 2011-03-07 22:22:56

+0

它實際上是一個舌頭評論中的舌頭,我也會用「骰子」 – Roy 2011-03-07 22:32:27