cocos2d iphone - 游戏架构:物理VS.代码模拟精灵行为

时间:2009-09-06 00:41:45

标签: iphone cocos2d-iphone chipmunk

Hello stackoverflow社区!

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

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

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

* 1)通过对其背后的物理主体施加力来移动它

OR

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


我知道你可能会说这取决于我。但是,随着cocos2d iphone的发展,它的预期行为是什么?

我提前感谢你< 3

2 个答案:

答案 0 :(得分: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
还有一种方法可以打开一个Chipmunk模式,让你可以更自由地控制你可以控制的东西,但代价是更逼真的模拟。

答案 1 :(得分:1)

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

然后使用每个形状函数

  

cpSpaceHashEach(空间 - > activeShapes,   & functioncallback,data)

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

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]

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