我有一个游戏,球在屏幕上反弹 - 很简单。我有防止球逃离屏幕空间的墙壁。我使用以下代码将球添加到屏幕上,这在每次添加之间会有一些延迟:
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); 我可以看到这些球正好在彼此之上并且它们堆叠速度。到底是怎么回事?我可以拥有多少限量?有什么指针吗?我很迷茫和困惑。
谢谢!
答案 0 :(得分:0)
所以,我想通了。我创建了一个由4个生成点组成的数组(请注意它与我看到的球数相匹配)。每个生成点都类似于这个spawnPoint:{position:cc.p(x,y)}。因此,当我使用ballBody.setPos(spawnPoint.position)为主体分配位置时,它没有创建新的cc.p对象来存储位置,而是实际使用我提供的那个。所以,我创造的每个球都分享了这4个位置中的一个。在移动设备上,这可以正常工作,并且实际创建了cc.p,而不是仅仅指向我提供的那个。希望它可以帮到某人。