0

我在 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 毫秒刷新一次我的世界......请帮助

4

1 回答 1

0

CreateBody 函数应该返回一个您可以保留的引用,以便稍后销毁主体。

var mybody = CreateBody( bodyDef );
mybody.CreateFixture( fixDef );

您不能只在主体中设置属性来更改它,您需要使用适当的功能:

// later...
mybody.SetActive( false );
mybody.SetAwake( true );

var vel = mybody.GetLinearVelocity();
vel.x = 2000;
mybody.SetLinearVelocity( vel );

var pos = mybody.GetPosition();
pos.x += 500;
mybody.SetPosition( pos );

mybody.SetFixedRotation( true );
mybody.SetSleepingAllowed( true );

请记住,500 个单位是半公里,所以这可能不是您想要做的。使用米作为您的尺寸,而不是像素。2000m/s 的速度大约是 7200km/h 或 6 马赫(作为参考,有史以来最快的飞机大约是 8 马赫,所以这也很可能不是你想要的)。查看此页面以了解其他一些常见问题:http ://www.iforce2d.net/b2dtut/gotchas

于 2014-06-14T21:09:49.413 回答