2

你好 stackoverflow 社区!

我试图弄清楚如何使用 cocos2d 构建我的游戏。

我的问题是 cocos2d 的物理引擎(我说的是花栗鼠)位于精灵背后的世界中。

当我移动精灵时,我想知道是否应该

*1) 通过在其后面的物理体上施加力来移动它

或者

2)如果我应该只通过代码模拟运动,那么只有在发生碰撞时才使用物理。*


我知道你可能会说这取决于我。但是 cocos2d iphone 开发时的预期行为是什么?

我提前谢谢你<3

4

2 回答 2

3

要将其保持在花栗鼠系统内,您将施加力/脉冲。有一些例子,人们用自己的代码控制移动精灵,让身体跟随精灵,然后将身体控制权交还给花栗鼠模拟。

相当多的人也只是使用花栗鼠进行碰撞检测和完全用他们自己的代码控制精灵的运动。这可以通过将身体添加到花栗鼠空间但不将形状添加到空间来完成。

这里有一些关于这个主题的讨论.. 我不能将它们作为超链接发布,因为我是一个新用户..

http://groups.google.com/group/cocos2d-iphone-discuss/browse_thread/thread/ae37e90eac059135/081da9bcefec76ba?#081da9bcefec76ba

http://www.cocos2d-iphone.org/forum/topic/877

http://jeanbombeur.com/content/2009-07-08-synchronizing-sprites-positions-and-rotations-between-chipmunk-and-cocos2d

欢迎并祝你好运!

PS
还有一种方法可以打开花栗鼠模式,让您对可以控制的内容有更多的自由,但代价是更逼真的模拟。

于 2009-09-06T02:58:35.423 回答
1

对于想要与形状保持一致的精灵,您需要在创建形状时将精灵绑定为形状->数据。

然后使用每个形状函数

cpSpaceHashEach(space->activeShapes, &functioncallback, 数据)

在使用 shape->data 的回调函数中,您可以将精灵位置更新为附加到形状的主体的位置

Sprite s = shape->data
[s setPosition:cpv(body->p.x,body->p.y)];

使用 Cocos 调度调用 cpSpaceStep() 和 cpSpaceHashEach()。确保你不要在每一帧都调用它们,否则你会遇到保持同步的问题。

我用

[self schedule:@selector(step:) interval:(1.0f/60.0f)/3]

这样,我的精灵都遵循黑猩猩数据并执行物理,而无需我做额外的工作。

于 2009-09-06T18:41:04.120 回答