物理世界的界限

时间:2014-03-27 11:02:24

标签: cocos2d-iphone

通过关注this tutorial,我可以使用cocos2d 版本3 进行跟踪。

这是非常基本的。在应用的CCScene中,我们创建了一个世界:

_physicsWorld = [CCPhysicsNode node];
_physicsWorld.gravity = ccp(0,-100);
_physicsWorld.debugDraw = YES;
[self addChild:_physicsWorld];

然后用身体添加一个主角精灵。

_protagonist = [CCSprite spriteWithImageNamed:@"player.png"];
_protagonist.position = ccp(self.contentSize.width/2, self.contentSize.height/2);
_protagonist.physicsBody = [CCPhysicsBody bodyWithRect:(CGRect){CGPointZero, _protagonist.contentSize} cornerRadius:0];
[_physicsWorld addChild:_protagonist];

现在,这是我的问题。主角精灵掉落是因为有{0; -100}重力矢量。但是,它永远不会停止。所以它会从屏幕上消失,永远不会被再次看到。

这是正常的,我明白了。

所以我试图用4 CCPhysicNode创建一个世界边界框。例如,最重要的一个atm,阻止主角落下的底线:

CCPhysicsNode* bottom = [CCPhysicsNode node];
bottom.contentSize = CGSizeMake(self.contentSize.width, 20);
bottom.position = ccp(0, self.contentSize.height);
bottom.physicsBody = [CCPhysicsBody bodyWithRect:(CGRect){CGPointZero, bottom.contentSize} cornerRadius:0];
[_physicsWorld addChild:bottom];

据我了解cocos2d的chipmunk集成,这应该是:

  • 在坐标(0,1136)处创建一个cocos2d物理节点,并在大小(320,20)处创建
  • 将花栗鼠体连接到物理节点(320,20)
  • 大小的形状
  • 检测与主角的碰撞(或者它应该?它应该在同一个collisionGroup?)

屏幕上发生了什么:没有。是的,debugDraw=true,没有任何内容。主角精灵不断下降,就像甘道夫一样,但是它的厄运却是y无限远(甚至超越!)的深渊。

要改写一下,添加bottom CCPhysicsNode并不会改变一件事。

帮助!

非常感谢回报。

1 个答案:

答案 0 :(得分:0)

CCPhysicsNode只是一个世界容器,可以容纳游戏中的所有物理对象。不要为每个物理对象创建一个新的。而是创建一个CCNode并附加其物理主体。然后将新的CCNode添加到CCPhysicsNode。换句话说,您的代码看起来没问题,除了第一行应该是:

CCNode* bottom= [CCNode node];