Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 as3空格键功能不工作F_Actionscript 3_Flash_Actionscript_Flash Cs5_Flash Cs4 - Fatal编程技术网

Actionscript 3 as3空格键功能不工作F

Actionscript 3 as3空格键功能不工作F,actionscript-3,flash,actionscript,flash-cs5,flash-cs4,Actionscript 3,Flash,Actionscript,Flash Cs5,Flash Cs4,我已经写了一个代码来移动按下空格键的电影剪辑。因此,如果有人按下空格键,它会激活一个布尔变量,从false变为true,如果为true,对象会移动,但它不起作用。能找个人帮忙吗。多谢各位 var rope = MovieClip(this.root).boat_mc.rope_mc.fishyrope_mc.hitbox_mc; var ropeMove:Boolean = false; stage.addEventListener(Event.ENTER_FRAME, ropeCo

我已经写了一个代码来移动按下空格键的电影剪辑。因此,如果有人按下空格键,它会激活一个布尔变量,从false变为true,如果为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;
        }
    }
}
这应该行得通

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

我可以在您的代码中发现两个问题:

一,。所有内容都在事件中。请输入\u帧事件处理程序。这意味着每一帧代码都将被运行:包括添加键盘事件侦听器的位置。1秒后,假设您以每秒30帧的速度运行,当您按空格键时,onSpacebarUp将触发30次,并持续增加。可能不是个好主意,你肯定只想添加一次

二,。布尔值将导致movieclip移动的部分位于一个方法中:dropRope。但这并没有在任何地方被称为,所以它实际上什么也没做。也可能不需要事件参数e:event部分,因为您既没有使用它,也没有从事件调用它


BennettLiam的代码应该做一些更接近您想要做的事情,我只是添加这个答案来解释为什么您的代码不起作用。在他们的回答中,他们已经解决了我提到的上述问题:将键盘的事件侦听器代码移到事件框架处理程序循环之外,因此只添加一次,并更改了enter frame事件处理程序,以调用dropRope o every frame,以便它正在做一些事情。

实际上,它确实存在于AS3中。但这并不是一种优雅的方式来指代主课。哦,你说得对“根”确实存在。从我的帖子中删除。非常感谢你的解释,我真的很感激。如果我听不懂的话,简单地从别人那里获取代码是没有意义的。嗨,贝内特利亚姆,非常感谢你的帮助,我真的很感激。如果你查看我的帖子,你会发现我已经根据你所说的内容编辑了我的代码。然而,现在发生了一件奇怪的事情。当电影加载时,movieclip开始自行移动,如果我打开空格键,它就会停止:/。我在做什么?感谢快速浏览,这可能是因为ropemove在startok是真的,现在它再次编辑了我的代码,就像它下降了,但到达某个点后没有停止一样。所以我对x和y都做了跟踪,即使物体在移动,y也不会改变。因此他们不会停止。知道为什么吗?
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;
        }
    }
}