2014-02-19 32 views
0

嗨,大家非常感謝你試圖幫助AS3閃光鍵盤事件空格鍵問題

好吧所以問題是這樣的。我試圖用

movieClip.x += xspeed ; 

自動移動一個影片剪輯ofcourse這個工程,但問題是,我想這與鍵盤按..problem觸發是我不能一個鍵盤事件,這可以作爲一個鼠標點擊。 。它只要按下空格鍵就可以工作,但如果我釋放它,它就會停止工作..我希望它像onclick它應該開始自動移動。

任何想法?謝謝

嗨,非常感謝您的回覆,併爲延誤感到抱歉。你的代碼給了我一個想法,但我試圖寫它沒有類。它不會拋出任何錯誤,但它不工作。我一定在做一些愚蠢的事情,請看看,讓我知道。 //繩編碼

var ropey = MovieClip(this.root).boat_mc.rope_mc.fishyrope_mc.hitbox_mc.y ; 
    trace(ropey); 
    var ropemove:Boolean; 


    stage.addEventListener(Event.ENTER_FRAME,ropeCode); 

    function ropeCode(e:Event):void 
    { 
       //detect keyboard spacebar click 
       stage.addEventListener(KeyboardEvent.KEY_UP,onSpacebarUp); 

       function onSpacebarUp(e:KeyboardEvent):void 
       { 
        if (e.keyCode == Keyboard.SPACE) 
        { 
         ropemove = true; 
        } else if(ropey > 600) { 
         ropemove = false; 
        } 

       } 

        //drop rope if variable = true 

        function dropRope(e:Event):void 
        { 

         if(ropemove = true) { 
          MovieClip(this.root).boat_mc.rope_mc.y += xSpeed; 
         } else if (ropemove = false) { 
          MovieClip(this.root).boat_mc.rope_mc.y -= xSpeed; 
         } 
        } 



    } 

回答

1

MyObj延伸MovieClip(或Sprite)。基本上所有這一切發生的是,當你得到KEY_UP(不是KEY_DOWN,因爲如果按住鍵將會重複),你應該只是切換變量。然後,每幀,檢查這個變量,如果是它的好,移動

喜歡的東西:

private var m_shouldMove:Boolean = false; 

// constructor 
public function MyObj() 
{ 
    // add our listener for when we're added to the stage as we'll be adding events on it 
    this.addEventListener(Event.ADDED_TO_STAGE, this._onAddedToStage); 
} 

private function _onAddedToStage(e:Event):void 
{ 
    // NOTE: the keyboard listener goes onto the stage 
    // you'll also need to remove the events when your object is removed (e.g. REMOVED_FROM_STAGE) 
    this.removeEventListener(Event.ADDED_TO_STAGE, this._onAddedToStage); 
    this.addEventListener(Event.ENTER_FRAME, this._onEnterFrame); 
    this.stage.addEventListener(KeyboardEvent.KEY_UP, this._onKeyUp); 
} 

private function _onEnterFrame(e:Event):void 
{ 
    // every frame, if we should move, do so 
    if(this.m_shouldMove) 
     this.x += this.speed; 
} 

private function _onKeyUp(e:KeyboardEvent):void 
{ 
    if(e.keyCode == Keyboard.SPACE) 
     this.m_shouldMove = !this.m_shouldMove; // toggle our var 
} 

更新

我返工您的代碼示例,所以它應該現在的工作:

var rope = MovieClip(this.root).boat_mc.rope_mc.fishyrope_mc.hitbox_mc; 
var ropeMove:Boolean = false; 

stage.addEventListener(Event.ENTER_FRAME, ropeCode); 
stage.addEventListener(KeyboardEvent.KEY_UP, onSpacebarUp); 

function onSpacebarUp(e:KeyboardEvent):void 
{ 
    if (e.keyCode == Keyboard.SPACE) 
     ropeMove = !ropeMove; // toggles ropeMove (i.e. if it's true, sets it to false, and vice versa) 
} 

function ropeCode(e:Event):void 
{ 
    // move the rope 
    if(ropeMove) 
    { 
     rope.y += xSpeed; 

     // stop moving if we've gone too far 
     if(rope.y > 600.0) 
     { 
      rope.y = 600.0; 
      ropeMove = false; 
     } 
    } 
} 

我改變什麼:

  • 持有你的繩索作爲一個變量,使其更容易訪問
  • 刪除ropey,因爲它是沒有必要的(你> 600.0支票,你總有需要重新計算
  • 現在被添加鍵盤事件與輸入幀事件(你添加一個新的鍵盤事件的每一幀
  • 鍵盤事件偵聽器只是切換的ropeMove VAR(有沒有點檢查> 600.0在這裏,因爲它意味着你只當任何其他鍵被按下檢查)
  • 將進入幀事件簡單地移動繩索y
  • 在輸入框情況下,如果我們y是太大了,我們停止移動

什麼代碼是這樣做的:

  • 我們建立瓦爾 - roperopeMove - ropeMove使用要知道,如果我們可以將繩子或不
  • 我們添加我們的事件偵聽器 - 一個用於keybard事件,搭上了空格鍵,和一個輸入幀事件,所以如果有必要
  • 在我們可以使我們的繩子鍵盤事件,如果我們的關鍵是空格鍵,我們撥動我們的ropeMove變量
  • 在輸入框時,如果ropeMove是真的,我們把我們的繩子
  • 如果我們rope.y大於600,我們把它夾到600,並設置ropeMovefalse所以我們停止移動

更新2

由於增加了一個變量ropeDir,繩子這時將會連續上下移動(地設想明ropeMovetrue

var rope = MovieClip(this.root).boat_mc.rope_mc.fishyrope_mc.hitbox_mc; 
var ropeMove:Boolean = false; 
var ropeDir:int = 1; 

stage.addEventListener(Event.ENTER_FRAME, ropeCode); 
stage.addEventListener(KeyboardEvent.KEY_UP, onSpacebarUp); 

function onSpacebarUp(e:KeyboardEvent):void 
{ 
    if (e.keyCode == Keyboard.SPACE) 
     ropeMove = !ropeMove; // toggles ropeMove (i.e. if it's true, sets it to false, and vice versa) 
} 

function ropeCode(e:Event):void 
{ 
    // move the rope 
    if(ropeMove) 
    { 
     rope.y += xSpeed * ropeDir; 

     // stop moving if we've gone too far 
     if(rope.y > 600.0 && ropeDir == 1) 
      ropeDir = -1; 
     else if(rope.y < 0.0 && ropeDir == -1) 
      ropeDir = 1; 
    } 
} 
+0

嗨,請檢查我的代碼上面的頂部,我試圖按照你的想法沒有類,但它不工作,非常感謝您的幫助。如果你能幫我多一點,我會很感激。 – Anando

+0

非常感謝你,對於像我們這樣的noobs來說,這是一個很好的解釋。只是一個問題,由於某種原因,它不會停在Y 600. – Anando

+0

沒關係我犯了一個錯誤:)修復它。非常感謝你 – Anando

0
addEventListener(KeyboardEvent.KEY_DOWN, moveStarter); 

function moveStarter():void 
{ 
    addEventListener(Event.ENTER_FRAME, startMove); 
} 
+0

抱歉,我不是足夠清晰的addEventListener(KeyboardEvent.KEY_DOWN,startMove);這是我正在使用的,但是隻有當按鍵被按下時,對象纔會移動,我想要按住按鍵,然後在沒有按下按鍵的情況下繼續移動對象。希望澄清我的問題。 – Anando

+0

所以,你的意思是即使用鼠標點擊右鍵,你也無法做出你想要的東西?好吧,我正在編輯我的答案然後 –