2013-12-15 25 views
0

我有一個遊戲。 (感覺要下載它hereMovieclip不能自行移動

在我的遊戲中,你可能會注意到這個人不會自行移動。您必須單擊一次屏幕才能讓該人用箭頭鍵左右移動。

我Main.as:

package 
{ 
import flash.display.MovieClip; 
import flash.utils.Timer; 
import flash.utils.getTimer; 
import flash.events.TimerEvent; 
import flash.display.Stage; 
import flash.events.Event; 
import flash.events.KeyboardEvent; 
import flash.ui.Keyboard; 
import flash.display.DisplayObjectContainer; 
import flash.text.TextField; 
import flash.events.MouseEvent; 
import flash.display.Graphics; 
import flash.display.Sprite; 
import flash.geom.ColorTransform; 
import flash.text.TextFormat; 
import flash.text.engine.TextBaseline; 

public dynamic class Main extends MovieClip 
{ 
    // classes 
    private var _physics:Physics; 
    private var _timer:Timer; 
    var interval_timer:TextField = new TextField(); 
    private var startTime:int; 
    private var diff:int; 
    private var _timer2:Timer 
    private var _stage:MovieClip = container; 
    private var _frame:int; 
    private var fade:Number = 1.0; 
    private var fadeAmount:Number = 0.01; 
    private var _timer3:Timer = new Timer(25); 
    private var retval:Boolean = false; 
    var survive:TextField = new TextField(); 
    var survivedTime:Number; 
    var isRight:Boolean=false 
    var isLeft:Boolean=false 
    var isUp:Boolean=false 
    var isDown:Boolean=false 
    var pause:TextField = new TextField(); 
    var pausedes:TextField = new TextField(); 


    public function Main() 
    { 
     _physics = new Physics(container); 
     _physics.enable(); 
     _timer = new Timer(500); 
     _timer.addEventListener(TimerEvent.TIMER, timerFunction); 
     _timer.start(); 
     start.addEventListener(MouseEvent.CLICK, buttonClickHandler); 
     credits.addEventListener(MouseEvent.CLICK, buttonClickHandler2); 
    } 


     // the event listeners 
     private function update(e:Event):void 
     { 
      var currentTime:int = getTimer(); 
      var _ballArray:Array = _physics._ballArray; 
      var tempBall1:Ball; 
      var i:int; 
      //check if we hit top 
      if (((man.x - man.width/2) <= _physics._minX)) 
      { 
       man.x += 7; 
      } 
      else if (((man.x + man.width/2) >= _physics._maxX)) 
      { 

       man.x -= 7; 
      } 

      for (i = 0; i < _ballArray.length; i++) 
      { 
      // save a reference to ball 
       tempBall1 = _ballArray[i] as Ball; 

       if(_physics.hitTestCircle(tempBall1, man)) 
        { 

         man.gotoAndStop(2); 
         retval = true; 
         stage.removeEventListener(KeyboardEvent.KEY_UP, onKeyEvent); 
         stage.removeEventListener(KeyboardEvent.KEY_UP, upKey); 
         stage.removeEventListener(KeyboardEvent.KEY_DOWN, downKey); 
         stage.removeEventListener(Event.ENTER_FRAME, move); 
        } 
       if(retval) 
       { 
        _physics.disable(); 
        _timer2.stop(); 
        survivedTime = diff; 
        _timer3.addEventListener(TimerEvent.TIMER, darken); 
        _timer3.start(); 
        stage.removeEventListener(Event.ENTER_FRAME, update); 

        _physics._ballArray = []; 
        //trace("you died!"); 
        retval = false; 

       } 
      } 


       diff = currentTime*0.001 - startTime*0.001; 
       interval_timer.text = String(diff); 

     } 

     private function darken(e:TimerEvent):void 
     { 
      fade-= fadeAmount; 
      if(fade < 0.0) 
      { 
        fade = 0.0; 
        _timer3.removeEventListener(TimerEvent.TIMER, darken); 
        _timer3.stop(); 
        endGame();      
      } 
     container.transform.colorTransform = new ColorTransform(fade, fade, fade, 1.0, 0, 0, 0, 0); 

     } 
     private function downKey(event:KeyboardEvent) 
     { 
      if(event.keyCode==39) 
      { 
       isRight=true; 
      } 
      if(event.keyCode==37) 
      { 
       isLeft=true; 
      } 
      if(event.keyCode==38) 
      { 
      isUp=true 
      } 
      if(event.keyCode==40) 
      { 
      isDown=true 
      } 
     } 
     private function upKey(event:KeyboardEvent){ 
      if(event.keyCode==39){ 
      isRight=false} 
      if(event.keyCode==37){ 
      isLeft=false} 
      if(event.keyCode==38){ 
      isUp=false} 
      if(event.keyCode==40){ 
      isDown=false} 
     } 
     private function move(e:Event) 
     { 
      if(isRight==true) 
       { 
       man.x +=5; 
       } 
      if(isLeft==true) 
       { 
       man.x -= 5; 
       } 
     } 
     private function frame(e:Event):void 
     { 
      _frame = currentFrame; 
      if(_frame == 25) 
      { 
       startGame(); 
      } 

     } 
     private function startGame():void 
     { 
      _physics._ballArray = []; 
      stage.removeEventListener(Event.ENTER_FRAME, frame); 
      //stage.removeEventListener(Event.ENTER_FRAME, startGame); 
      stage.removeEventListener(Event.ENTER_FRAME, _physics.remove); 
      _physics.enable();    

      // enable physics simulation 
      _timer2 = new Timer(500); 
      _timer2.addEventListener(TimerEvent.TIMER, timerFunction); 
      _timer2.start(); 
      stage.addEventListener(Event.ENTER_FRAME, update); 


      interval_timer.y = 18; 
      interval_timer.x = 500; 
      addChild(interval_timer); 
      startTime = getTimer(); 



     } 

     private function endGame() 
     { 
      var myFormat:TextFormat = new TextFormat(); 
      myFormat.size = 23; 
      survive.defaultTextFormat = myFormat; 
      gotoAndStop(26); 
      survive.x = 179.45; 
      survive.y = 177.90; 
      survive.textColor = 0xFFFFFF; 
      survive.text = String(survivedTime + " secs"); 
      addChild(survive); 
      stage.addEventListener(Event.ENTER_FRAME, _physics.remove); 
      stage.removeEventListener(KeyboardEvent.KEY_UP, onKeyEvent); 
      stage.removeEventListener(KeyboardEvent.KEY_UP, upKey); 
      stage.removeEventListener(KeyboardEvent.KEY_DOWN, downKey); 
      stage.removeEventListener(Event.ENTER_FRAME, move); 
      mainmenu.addEventListener(MouseEvent.CLICK, buttonClickHandler5); 
      retry.addEventListener(MouseEvent.CLICK, buttonClickHandler6); 
      _physics._ballArray = []; 
     } 

     private function onKeyEvent(e:KeyboardEvent):void 
     { 
      if (stage.frameRate == 20) 
      { 
       if (e.keyCode == 80) 
       { 
        stage.frameRate = 8; 
        stage.removeEventListener(Event.ENTER_FRAME, update); 
        pauseGame(); 

       } 
      } 
      else if (stage.frameRate == 8) 
      { 
       if (e.keyCode == 80) 
       { 
        stage.frameRate = 20; 
        stage.addEventListener(Event.ENTER_FRAME, update);      
        unpause(); 
       } 
      } 
     } 

     private function pauseGame():void 
     { 
      _physics.disable(); 
      _timer2.stop(); 
      stage.addEventListener(KeyboardEvent.KEY_UP, onKeyEvent); 
      stage.removeEventListener(KeyboardEvent.KEY_UP, upKey); 
      stage.removeEventListener(KeyboardEvent.KEY_DOWN, downKey); 
      stage.removeEventListener(Event.ENTER_FRAME, move); 
      var myFormat:TextFormat = new TextFormat(); 
      var myFormat2:TextFormat = new TextFormat(); 
      myFormat.size = 30; 
      myFormat2.size = 15; 
      pause.defaultTextFormat = myFormat; 
      pausedes.defaultTextFormat = myFormat2; 
      pause.x = 239.95; 
      pause.y = 165.90; 
      pause.textColor = 0x000000; 
      pausedes.x = 221.8; 
      pausedes.y = 205.45; 
      pausedes.width = 130.2; 
      pausedes.textColor = 0x000000; 
      pause.text = String("Paused"); 
      pausedes.text = String("Press P to Unpause"); 
      addChild(pause); 
      addChild(pausedes); 

     } 
     private function unpause():void 
     { 

      stage.addEventListener(KeyboardEvent.KEY_UP, onKeyEvent); 
      stage.addEventListener(KeyboardEvent.KEY_UP, upKey); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN, downKey); 
      stage.addEventListener(Event.ENTER_FRAME, move); 
      _physics.enable(); 
      _timer2.start(); 
      removeChild(pause); 
      removeChild(pausedes); 

     } 
     public function timerFunction(e:TimerEvent):void 
     { 
      _physics.createBalls(1);     
     } 
     //start button 
     private function buttonClickHandler(event:MouseEvent):void 
     { 
      gotoAndStop(3); 
      ok.addEventListener(MouseEvent.CLICK, buttonClickHandler4); 
      _physics.disable(); 
      _timer.stop(); 
      _timer.removeEventListener(TimerEvent.TIMER, timerFunction); 
      stage.addEventListener(Event.ENTER_FRAME, _physics.remove); 
      _physics._ballArray = []; 
     } 
     //credits button 
     private function buttonClickHandler2(event:MouseEvent):void 
     { 
      gotoAndStop(2); 
      stage.addEventListener(Event.ENTER_FRAME, _physics.remove); 
      _physics.disable(); 
      _timer.removeEventListener(TimerEvent.TIMER, timerFunction); 
      _timer.stop(); 
      back.addEventListener(MouseEvent.CLICK, buttonClickHandler3); 
     _physics._ballArray = []; 

     } 
     //back button 
     private function buttonClickHandler3(event:MouseEvent):void 
     { 
      gotoAndStop(1); 
      _physics.enable(); 
      _timer.addEventListener(TimerEvent.TIMER, timerFunction); 
      stage.removeEventListener(Event.ENTER_FRAME, _physics.remove); 
      _timer.start(); 
      start.addEventListener(MouseEvent.CLICK, buttonClickHandler); 
      credits.addEventListener(MouseEvent.CLICK, buttonClickHandler2); 
      _physics._ballArray = []; 

     } 
     //ok button 
     private function buttonClickHandler4(event:MouseEvent):void 
     { 
      stage.addEventListener(KeyboardEvent.KEY_UP, upKey); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN, downKey); 
      stage.addEventListener(Event.ENTER_FRAME, move); 
      stage.addEventListener(KeyboardEvent.KEY_UP, onKeyEvent); 
      gotoAndPlay(4); 
      stage.addEventListener(Event.ENTER_FRAME, frame); 
      _physics._ballArray = []; 

      //stage.addEventListener(Event.ENTER_FRAME, startGame); 

     } 
     //main menu button 
     private function buttonClickHandler5(event:MouseEvent):void 
     { 
      gotoAndStop(1); 
      container.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 0); 
      removeChild(survive); 
      removeChild(interval_timer);  
      _physics.enable(); 
      _timer.addEventListener(TimerEvent.TIMER, timerFunction); 
      stage.removeEventListener(Event.ENTER_FRAME, _physics.remove); 
      _timer.start(); 
      start.addEventListener(MouseEvent.CLICK, buttonClickHandler); 
      credits.addEventListener(MouseEvent.CLICK, buttonClickHandler2); 
      _physics._ballArray = []; 
      fade = 1.0; 
      fadeAmount = 0.01; 
     } 
     //retry button 
     private function buttonClickHandler6(event:MouseEvent):void 
     { 
      container.transform.colorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 0); 
      removeChild(survive); 
      removeChild(interval_timer);  
      gotoAndPlay(4); 
      stage.addEventListener(Event.ENTER_FRAME, frame); 
      stage.addEventListener(KeyboardEvent.KEY_UP, upKey); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN, downKey); 
      stage.addEventListener(Event.ENTER_FRAME, move); 
      stage.addEventListener(KeyboardEvent.KEY_UP, onKeyEvent); 
      _physics._ballArray = []; 
      fade = 1.0; 
      fadeAmount = 0.01; 
      man.x = 286.65; 
      man.y = 391.85; 
      man.gotoAndStop(1); 

     } 


} 

}

這是我使用,使該名男子的舉動文件。我在哪裏更改代碼以使遊戲正常工作,以便男士在「Go!」之後移動,而且您不必點擊屏幕。

我的另一個問題是:當你按「P」時,你可以暫停遊戲。但是,您可能會在通過再次按下「P」鍵取消暫停遊戲後注意到,計時器已關閉了您暫停的秒數。該代碼也是定時器的代碼。我在代碼中更改了哪些內容以使計時器正確運行,這意味着在暫停遊戲之後,它不會跳過暫停的秒數,而是從停止的位置繼續。

+0

代碼不足。它在哪裏顯示「Go!」?你也沒有正確地清除移動的變量,我在向左移動時死亡,並且隨後的所有重試使得該人立即向左移動而無法取消移動。 – Vesper

+0

關於使計時器工作排除暫停時間 - 不要使用'getTimer()'來代替這個,而是測量在同一個var'currentTime'中傳遞的幀,如果暫停,不要增加var。 – Vesper

+0

它看起來像我「更新」是你移動的人。這是從startGame調用的,它只在buttonClickHandler4和buttonClickHandler6(KeyboardEvent的綁定位置)中調用。所以我不會指望這個人移動,直到其中一個點擊處理程序被調用。也許調用startGame並綁定constructer中的關鍵事件? – dhc

回答

0

編輯:我想通了,通過此鏈接問題:http://www.trainingtutorials101.com/2010/10/keyboard-events-wont-work-unless-user.html

我不得不使用命令stage.focus = this集中在舞臺上我的影片剪輯的人,所以這樣它可以偵聽鍵盤事件,而我的鼠標點擊屏幕。

並刪除男人周圍的黃色矩形我使用了命令stage.stageFocusRect = false

感謝@dhc和@Vesper的所有幫助。

+0

你快樂工作了! – dhc

0

這是太長的評論線程爲這個問題。在你調用buttonClickHandler4之後,你的鍵盤事件應該正常工作。

設置調試點或跟蹤語句,查看是否調用了buttonClickHandler4。添加相同的名稱以確保正在調用downKey和move。這應該縮小問題的範圍。

+0

好吧我會嘗試,謝謝。 –

+0

按鈕點擊處理程序4正在調用,以及downKey和移動,但問題是,您必須至少點擊一次屏幕才能讓該移動。 –

+0

這是怎麼回事? –