as3空格键功能不起作用
Posted
技术标签:
【中文标题】as3空格键功能不起作用【英文标题】:as3 space bar function not workingf 【发布时间】:2014-03-24 12:30:18 【问题描述】:我编写了一个代码来移动MovieClip
按空格键。因此,如果有人按下空格键..它会激活一个从false
到true
的布尔变量,如果它为真,则对象移动..但它不起作用。有人可以帮忙吗?谢谢
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;
【问题讨论】:
【参考方案1】:这应该可以工作
var ropemove:Boolean = true;
var xSpeed = 5;
var once:Boolean=false;
stage.addEventListener(Event.ENTER_FRAME,ropeCode);
stage.addEventListener(KeyboardEvent.KEY_UP,onSpacebarUp);
function onSpacebarUp(e:KeyboardEvent):void
if (e.keyCode == 32)
if (ropemove==true)
if(once==false)
ropemove = false;
once=true
if(ropemove==false)
ropemove==true
if (rope.x >= stage.stageWidth )
ropemove = false;
trace(ropemove)
function ropeCode(e:Event):void
if (ropemove == true)
rope.x += xSpeed;
【讨论】:
嗨 bennettliam,非常感谢您的帮助,我真的很感激。如果您查看我的帖子,您会看到我已经根据您所说的内容编辑了我的代码。然而现在发生了一件奇怪的事情。当电影加载时,movieclip 开始自行移动,如果我使用空格键,它就会停止:/。我在做什么菜鸟?谢谢 一目了然,可能是因为ropemove一开始就为真 ok 再次编辑了我的代码,现在它可以工作了,因为它会下降,但在达到一个点后不会停止。所以我对 x 和 y 都做了跟踪..即使物体在移动,Y 也不会改变。因此他们不会停止。知道为什么吗?【参考方案2】:我可以在您的代码中发现两个问题:
1.) 一切都在您的 Event.ENTER_FRAME 事件处理程序中。这意味着每一帧,该代码都将运行:包括您添加键盘事件侦听器的位置。 1 秒后,(假设您以 30 fps 的速度运行)onSpacebarUp() 将在您按下空格键时触发 30 次,并不断增加。可能不是一个好主意,很确定您只想添加一次。
2.) 布尔值将导致您的影片剪辑移动的部分在一个方法中:dropRope()。但这在任何地方都没有被调用,所以它实际上什么也没做。也可能不需要事件参数(e:event
)部分,因为您没有使用它,也没有从事件中调用它。
BennettLiam 的代码应该做一些更接近你想要的事情,我只是添加这个答案作为你的代码为什么不起作用的解释。在他们的回答中,他们解决了我提到的上述问题:将键盘的事件侦听器代码移到事件帧处理程序循环之外,因此它只添加一次,并将输入帧事件处理程序更改为每次调用 dropRope()框架,以便它在做某事。
【讨论】:
实际上,它确实存在于 AS3 中。但这不是引用主类的优雅方式。 哦,你是对的。 “根”确实存在。从我的帖子中删除它。 非常感谢您的解释,非常感谢。如果我看不懂,那么简单地从人们那里获取代码是没有意义的。【参考方案3】: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;
【讨论】:
以上是关于as3空格键功能不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的代码在 android(as3) 中对 CameraRoll 不起作用