Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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通过触摸事件连续移动物体_Actionscript 3_Button_Trace_Touch Event_Physics Engine - Fatal编程技术网

Actionscript 3 as3通过触摸事件连续移动物体

Actionscript 3 as3通过触摸事件连续移动物体,actionscript-3,button,trace,touch-event,physics-engine,Actionscript 3,Button,Trace,Touch Event,Physics Engine,我正在尝试使用actionscript为我的Nexus7制作一个交互式场景。我试图在按下一个按钮的同时,让颈背的身体不断地移动。跟踪(event.target.name);在tap中,处理程序返回被按下按钮的实例名称,正如我预期的那样,但enter_frame pressed函数中的同一跟踪语句返回按钮的父名称,因此下面的代码中没有发生移动 resetBtn.addEventListener(TouchEvent.TOUCH_BEGIN , tapHandler); ballBtn.addEve

我正在尝试使用actionscript为我的Nexus7制作一个交互式场景。我试图在按下一个按钮的同时,让颈背的身体不断地移动。跟踪(event.target.name);在tap中,处理程序返回被按下按钮的实例名称,正如我预期的那样,但enter_frame pressed函数中的同一跟踪语句返回按钮的父名称,因此下面的代码中没有发生移动

resetBtn.addEventListener(TouchEvent.TOUCH_BEGIN , tapHandler);
ballBtn.addEventListener(TouchEvent.TOUCH_BEGIN , tapHandler );
leftArrow.addEventListener(TouchEvent.TOUCH_BEGIN , tapHandler );
rightArrow.addEventListener(TouchEvent.TOUCH_BEGIN , tapHandler );

private function tapHandler(event:TouchEvent):void
{
    //listen for mouse up on the stage, in case the finger moved off of the button accidentally when they release.
    rightArrow.addEventListener(TouchEvent.TOUCH_END, endTouch);
    //while the mouse is down, run the tick function once every frame as per the project frame rate
        addEventListener(Event.ENTER_FRAME, pressed); 

    trace(event.target.name);           
    //ball.applyImpulse(new Vec2(25,0));
}

function endTouch(e:Event):void 
{
    removeEventListener(Event.ENTER_FRAME, pressed);  
    //stop running the tick function every frame now that the mouse is up
    this.removeEventListener(TouchEvent.TOUCH_END,endTouch); 
    //remove the listener for endTouch
}
function pressed(e:Event):void 
{
    space.step(1 / stage.frameRate);

    trace(e.target.name);           
    if(e.target.name == "leftArrow")
    {
        trace("going left");
        crane.position.x -=  5;
        boom.position.x -=  5;
        c.position.x -=  5;
    }
    if(e.target.name == "rightArrow")
    {
        trace("going Right");
        crane.position.x +=  5;
        boom.position.x +=  5;
        c.position.x +=  5;
    }
}

如果您能帮我解决这个问题或建议一个更好的方法来实现这个问题,我们将不胜感激。

您的问题基本上是您正在为输入帧事件将侦听器添加到父级,因此事件分派时的目标不是您希望的按钮。我认为与其移动监听器,不如使用变量保存对按钮的引用,如下所示:

private var curButton:Sprite;

resetBtn.addEventListener(TouchEvent.TOUCH_BEGIN , tapHandler);
ballBtn.addEventListener(TouchEvent.TOUCH_BEGIN , tapHandler );
leftArrow.addEventListener(TouchEvent.TOUCH_BEGIN , tapHandler );
rightArrow.addEventListener(TouchEvent.TOUCH_BEGIN , tapHandler );

private function tapHandler(event:TouchEvent):void
{
    curButton = event.target;
    curButton.addEventListener(TouchEvent.TOUCH_END, endTouch);

    addEventListener(Event.ENTER_FRAME, pressed); 
}

function endTouch(e:Event):void 
{
    trace("touch end received");
    removeEventListener(Event.ENTER_FRAME, pressed);  
    curButton.removeEventListener(TouchEvent.TOUCH_END, endTouch);
    curButton = null;
}
function pressed(e:Event):void 
{
    trace("currently pressed");
    space.step(1 / stage.frameRate);

    if(curButton == leftArrow)
    {
        trace("going left");
        crane.position.x -=  5;
        boom.position.x -=  5;
        c.position.x -=  5;
    }
    if(curButton == rightArrow)
    {
        trace("going Right");
        crane.position.x +=  5;
        boom.position.x +=  5;
        c.position.x +=  5;
    }
}

好的,看看我上面的编辑,希望能帮助解决这个问题。另外,您可能已经发现定义变量时提供的实例名与.name属性或.id属性不同,因此实例名在运行时不再可用(如果确实需要,可以使用name属性,但必须自己填充,通常最好只在代码中使用实例名称,因为这在编译时会被检查,并且不会产生额外的运行时开销).

非常感谢我完成了这项工作,但我必须将var curButton更改为字符串,并仅跟踪curButton而不是curButton.name。但是,当释放leftArrow时,对象会一直向左移动,直到按下另一个按钮