我在 box2dweb 中使用这种非常标准的方式在鼠标单击时创建主体:
*stage.onMouseDown = function(){
var fixDef = new box2d.b2FixtureDef;
fixDef.density = 1;
fixDef.friction = 0.5;
fixDef.restitution = 0.7;
var bodyDef = new box2d.b2BodyDef();
bodyDef.type = box2d.b2Body.b2_dynamicBody;
bodyDef.position.x = mouseX /scale;
bodyDef.position.y = mouseY /scale;
fixDef.shape = new box2d.b2CircleShape(Math.random()*100/scale);
world.CreateBody(bodyDef).CreateFixture(fixDef);}
我真的不知道如何为我创建的实体插入名称或 ID(最终我可以num++
在每次创建时添加一个 var)。另外,我不知道如何通过id取回我的body并调用方法.DestroyBody专门删除它。
我正处于 JavaScript 和 Objective C 的早期阶段,所以为 Actionscript 制作的方法和文档让我抓狂..
提前致谢。
问题更新:
我找到了一种方法来取回我已经创建的对象,使用这种方式在所有对象中找到我想要的对象:
注意:myBody 是全局的
myBody['enter'+prodNum] = bodyDef;
bodyDef.userData = prodNum;
myBody['enter'+prodNum].id = bodyDef.userData;
prodNum 是一个全局变量,在每个循环中都有一个“++”。有了这个,我可以使用身体的 var 名称和 bodyDef.userData 属性来回忆我的身体。
使用以下函数,在通过 window.onload 执行的 init() 中调用,我可以,如 console.log 所示,更改我想要的检索到的正文,但是没有更改应用于画布中的正文,即使它日志中的属性导致修改我无法注意到屏幕上的任何变化。
function reduceObj(){
var itsMe;
itsMe = myBody.enter10;
var newPosX = itsMe.position.x;
itsMe.active = false;
itsMe.awake = true;
itsMe.linearVelocity.x = 2000;
itsMe.position.x = newPosX+500;
itsMe.fixedRotation=true;
itsMe.allowSleep=true;
console.log(myBody.enter10,itsMe,itsMe.id,'it s me');
}
无法理解为什么会发生这一切......另外我已经设置了 step() 函数,它应该每 x 毫秒刷新一次我的世界......请帮助