在cocos2dx和chipmunk中使用cc.Physics Sprite的奇怪行为

时间:2014-09-26 00:29:32

标签: cocos2d-x chipmunk

我有一个游戏,球在屏幕上反弹 - 很简单。我有防止球逃离屏幕空间的墙壁。我使用以下代码将球添加到屏幕上,这在每次添加之间会有一些延迟:

        var ball = {};
        ball.markedForDelete = false;
        ball.dir = spawnPoint.dir;

        var ballMass = 1;
        var ballBody = new cp.Body( ballMass, cp.momentForCircle( ballMass, 0, this._ballRadius, cp.v(0,0) ) );
        ballBody.setPos( spawnPoint.position );

        var magnitude = 200;
        var ang = spawnPoint.dir * Math.PI / 180;
        var vel = cp.v( magnitude * Math.cos(ang), magnitude * Math.sin(ang) );

        var shape = new cp.CircleShape( ballBody, this._ballRadius, cp.v( 0,0 ) );
        shape.ballShapeId = this.model.getNextBallShapeId ();
        shape.setElasticity( 1 );
        shape.setFriction( 0 );
        shape.setCollisionType( collision_type );
        this._space.addShape( shape );
        ball.shape = shape;
        shape.ball = ball;

        var sprite = cc.PhysicsSprite.create( file );
        sprite.nodeName = "Ball:" + shape.ballShapeId;
        sprite.setColor( cc.c3b( 255, 255, 255 ) );
        sprite.setScale ( 0.5 * this.ballScale );
        sprite.setBody( ballBody );
        this._gameStage.addChild( sprite, 5 );
        ball.sprite = sprite;
        sprite.ball = ball;

        this._space.addBody( ballBody );
        ballBody.setVel( vel )  ;

        return ball;

当在设备(iOS或Android)上运行时,此代码按预期工作,但是当我在网络上使用完全相同的代码时,事情会变得奇怪。首先,它从随机产生的点产生大约4个球没有故障,但所有跟随球在现有球上产生并且看起来像两个(或三个或四个取决于你玩多久)共享物理。如果我启用调试物理节点: cc.PhysicsDebugNode.create(this._space); 我可以看到这些球正好在彼此之上并且它们堆叠速度。到底是怎么回事?我可以拥有多少限量?有什么指针吗?我很迷茫和困惑。

谢谢!

1 个答案:

答案 0 :(得分:0)

所以,我想通了。我创建了一个由4个生成点组成的数组(请注意它与我看到的球数相匹配)。每个生成点都类似于这个spawnPoint:{position:cc.p(x,y)}。因此,当我使用ballBody.setPos(spawnPoint.position)为主体分配位置时,它没有创建新的cc.p对象来存储位置,而是实际使用我提供的那个。所以,我创造的每个球都分享了这4个位置中的一个。在移动设备上,这可以正常工作,并且实际创建了cc.p,而不是仅仅指向我提供的那个。希望它可以帮到某人。