我想尝试一个简单的任务,如果我在世界范围内移动一个对象,然后按一个按钮它应该回到原来的位置,但它不起作用,下面是我正在使用的代码 - 文件在这里 - 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
有人可以在这里指导我......
提前致谢...
金
答案 0 :(得分:1)
您看到的图片(box1
)与幕后的物理对象无关 - 您目前只移动图片而不是对象本身。
您需要在对象的SetPosition()
上使用SetTransform()
或b2Body
编辑07/7
当您使用Box2D World Construction Kit时,我查看了源代码(可在此处获取:https://github.com/jesses/wck)。主要课程似乎是BodyShape
(https://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提供所有帮助......
此致