我写了一个代码来按空格键移动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;
}
}
}
答案 0 :(得分:0)
这应该有效
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;
}
}
答案 1 :(得分:0)
我可以在您的代码中发现两个问题:
1。)所有内容都在Event.ENTER_FRAME事件处理程序中。这意味着将运行该代码的每一帧:包括您添加键盘事件侦听器的位置。 1秒后,(假设您以30 fps运行)onSpacebarUp()会在按空格键时触发30次,并且不断增加。可能不是一个好主意,相当肯定你只想添加一次。
2。)布尔值将导致影片剪辑移动的部分位于方法:dropRope()中。但这并没有在任何地方调用,所以它实际上没有做任何事情。也可能不需要事件参数(e:event
)部分,因为您没有使用它,也没有从事件中调用它。
BennettLiam的代码应该做的更接近你想要的东西,我只是添加这个答案作为你的代码无法工作的原因的解释。在他们的回答中,他们已经修复了我提到的上述问题:在事件框架处理程序循环之外移动了键盘的事件监听器代码,因此它只添加一次,并更改了输入框架事件处理程序以调用dropRope()o每个框架,以便它正在做某事。
答案 2 :(得分:0)
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;
}
}
}