2014-02-19 34 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

所以,你的意思是即使用鼠标点击右键,你也无法做出你想要的东西?好吧,我正在编辑我的答案然后 –