Box2d MovieClip到原始位置

时间:2014-07-05 10:42:22

标签: actionscript-3 box2d

我想尝试一个简单的任务,如果我在世界范围内移动一个对象,然后按一个按钮它应该回到原来的位置,但它不起作用,下面是我正在使用的代码 - 文件在这里 - http://www.fastswf.com/yAnIvBs(当我删除事件监听器时)

使用事件监听器 - http://www.fastswf.com/rpYsIt8

//////// ========================     停止();

var startXPos:Number = level1WorldObj.box1.x;
var startYPos:Number = level1WorldObj.box1.y;

function areaS(e:Event) {



level1WorldObj.box1.y= startYPos;
level1WorldObj.box1.x= startXPos;
level1WorldObj.box1.removeEventListener(Event.ENTER_FRAME, areaS);


}

but1.addEventListener(MouseEvent.CLICK,nClick3);

function nClick3(event:MouseEvent):void{
level1WorldObj.box1.addEventListener(Event.ENTER_FRAME, areaS);
level1WorldObj.box1.y= startYPos;
level1WorldObj.box1.x= startXPos;
}

///////////////// ======================

现在我希望能够做很多次,所以我保留了检测初始x,y作为全局的变量......

在这里你可以看到它在调试模式下的表现,奇怪的是只有剪辑不会移动到实际的身体 - http://www.fastswf.com/-Ijkta4

有人可以在这里指导我......

提前致谢...

2 个答案:

答案 0 :(得分:1)

您看到的图片(box1)与幕后的物理对象无关 - 您目前只移动图片而不是对象本身。

您需要在对象的SetPosition()上使用SetTransform()b2Body

编辑07/7

当您使用Box2D World Construction Kit时,我查看了源代码(可在此处获取:https://github.com/jesses/wck)。主要课程似乎是BodyShapehttps://raw.githubusercontent.com/jesses/wck/master/wck/BodyShape.as)。

通过它,您应该能够直接访问b2Body。如果它是null(可能是您TypeError的来源,那么您还没有调用createBody(),这实际上就是将所有属性视为在幕后创建物理对象。

一旦你有了b2Body,如果你想根据图形定位它,那么就可以使用函数syncTransform()

您应该在debugDraw课程上启用World,以便更轻松地查看后台发生了什么。注意:这需要在调用create()

之前完成

答案 1 :(得分:0)

我能够找到解决这个问题的方法,我找到了起点 -

迹(level1WorldObj.box1.b2body.GetPosition()X。); 迹(level1WorldObj.box1.b2body.GetPosition()Y);

然后,一旦我手动获得该位置,我就取下坐标并使用下面的代码......

level1WorldObj.box1.b2body.SetTransform(new V2(-2,2),0);

感谢@divillysausages提供所有帮助......

此致