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是太大了,我们停止移动
什么代码是这样做的:
- 我们建立瓦尔 -
rope
和ropeMove
- ropeMove
使用要知道,如果我们可以将绳子或不
- 我们添加我们的事件侦听器 - 一个用于keybard事件,搭上了空格键,和一个输入帧事件,所以如果有必要
- 在我们可以使我们的绳子键盘事件,如果我们的关键是空格键,我们拨动我们的
ropeMove
变量
- 在输入框时,如果
ropeMove
是真的,我们把我们的绳子
- 如果我们
rope.y
大于600,我们把它夹到600,并设置ropeMove
到false
所以我们停止移动
更新2
由于增加了一个变量ropeDir
,绳子这时将会连续上下移动(地设想明ropeMove
是true
)
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;
}
}
嗨,请检查我的代码上面的顶部,我试图按照你的想法没有类,但它不工作,非常感谢您的帮助。如果你能帮我多一点,我会很感激。 – Anando
非常感谢你,对于像我们这样的noobs来说,这是一个很好的解释。只是一个问题,由于某种原因,它不会停在Y 600. – Anando
没关系我犯了一个错误:)修复它。非常感谢你 – Anando