在box2dweb中如何破坏创建的主体

时间:2014-06-13 23:59:53

标签: javascript box2d box2dweb

我在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(最终我可以在每次创建时添加var num++)。另外,我不知道如何通过id取回我的身体并调用方法.DestroyBody来删除它。

我现在处于使用JavaScript和Objective C的早期阶段,因此为Actionscript制作的方法和文档让我疯狂。

提前致谢。

问题更新:

我找到了一种方法来取回我已经创建的对象,使用这种方式在所有对象中找到我想要的对象:

注意:myBody是全球性的

        myBody['enter'+prodNum] = bodyDef;
        bodyDef.userData = prodNum;
        myBody['enter'+prodNum].id = bodyDef.userData;

prodNum是一个全局变量,每个循环都有一个“++”。有了这个,我可以使用body的var名称和bodyDef.userData属性来回想起我的身体。

使用以下函数,在我的init()中调用,通过window.onload执行,我可以,如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毫秒刷新我的世界......帮助请

1 个答案:

答案 0 :(得分: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