as3空格键功能不起作用

Posted

技术标签:

【中文标题】as3空格键功能不起作用【英文标题】:as3 space bar function not workingf 【发布时间】:2014-03-24 12:30:18 【问题描述】:

我编写了一个代码来移动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;
        
    

【问题讨论】:

【参考方案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空格键功能不起作用的主要内容,如果未能解决你的问题,请参考以下文章

as3 - 联系表格不起作用

为啥我的代码在 android(as3) 中对 CameraRoll 不起作用

loadPolicyFile 在 AS3 中不起作用

Flash CS4 AS3 事件不起作用

AS3 MouseEvent.RIGHT_MOUSE_UP 不起作用

Event.MOUSE_LEAVE 在 AS3 中不起作用