2011-07-25 77 views
0

我正在製作一個垂直(不斷)滾動的射擊遊戲&正試圖基於計時器實例化對象。例如:在30秒處,放置一棟建築@ x,y。AS3 ActionScript 3 - 使用計時器實例化對象?

我的問題是,當遊戲開始時,「建築物」被實例化,然後再次在30秒的時間點 - 而不是僅在30秒的時間點。

如果有人能引導我在正確的方向,將不勝感激。

package com.gamecherry.gunslinger 
{ 
import flash.display.MovieClip; 
import flash.display.Stage; 
import flash.events.Event; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 

public class ObjectPlacer extends MovieClip 
{ 
    private var Build01Timer:Timer; 

    private var canPlace:Boolean = true; 
    private var stageRef:Stage; 
    private var startX:Number; 
    private var startY:Number; 
    private var time:int = 5000; 

    public function ObjectPlacer(stageRef:Stage) : void 
    { 
     this.stageRef = stageRef; 


    var Build01Timer = new Timer(time, 1); 
    Build01Timer.addEventListener(TimerEvent.TIMER, placeTimerHandler, false, 0, true); 
     addEventListener(Event.ENTER_FRAME, loop, false, 0, true); 

     Build01Timer.start(); 



    } 


    private function loop(e:Event): void 
    { 

     if (canPlace) 
     { 
     var BuildingsLeft01:BuildingsLeft = new BuildingsLeft(stage, 720, -540);  
     BuildingsLeft01.scaleX = -1; 
     stageRef.addChildAt((BuildingsLeft01), 2); 

     canPlace = false; 


     } 
    } 


    private function placeTimerHandler(e: TimerEvent) : void 
    { 
     canPlace = true; 
    } 


    private function removeSelf() : void 
    { 
     removeEventListener(Event.ENTER_FRAME, loop); 

     if (stageRef.contains(this)) 
     stageRef.removeChild(this); 
    } 


} 

}

我要去哪裏錯了?

謝謝你的期待。

回答

0

這裏是你的第一個類:

public class ObjectPlacer extends MovieClip 
{ 
private var Build01Timer:Timer; 

**private var canPlace:Boolean = true;** 

你在開始時將其設置爲TRUE,它設置爲false,這將解決您的問題:)

+0

D'哦!感謝您指出了這一點。感覺愚蠢比感到沮喪要好得多。 – GameCherry

+0

是的,當你在聲明變量的時候經常發生這種情況。我會在構造函數中將其設置爲false! - 也請點擊該複選框,以便人們可以看到你接受了答案:) – RasmusWL