as3空格键功能不起作用

时间:2014-02-22 21:22:34

标签: actionscript-3 flash actionscript flash-cs5 flash-cs4

我写了一个代码来按空格键移动MovieClip。因此,如果有人按下空格键,则会激活从falsetrue的布尔变量,如果它是真的,则对象会移动..但它不起作用。可以请一些人帮忙。谢谢

     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;
        }
    }
}

3 个答案:

答案 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;
        }
    }
}