2011-11-22 157 views
4

我有一个迷宫游戏,使用cocos2d 我有一个主要精灵可以保存“朋友”精灵 一旦“朋友”精灵与主精灵发生冲突,“朋友”精灵将跟随主要精灵到处。 现在我不知道如何让“朋友”精灵跟随主静止距离和平稳运动的主精灵。 我的意思是如果主精灵向上,“朋友”将在主精灵的后面。 如果主精灵正在离开,“朋友”精灵将位于主精灵的右侧。 请帮我和我分享一些代码...Cocos2d如何让一个精灵跟在另一个精灵之后?

+0

你会使用box2d,花栗鼠或纯cocos2d?如果普通的cocos2d,你会使用动画来移动,还是移动像素? –

回答

3

您可以通过使用主精灵的位置作为朋友精灵的目标来实现以下行为。这将涉及实施分离(保持最小距离),凝聚力(保持最大距离)和缓和(使运动平稳)。

确切的算法(以及更多)在wonderful behavior animation paper by Craig Reynolds中有详细说明。还有个别功能的视频和示例源代码(使用C++)。

您所需要的算法(它是多简单的人的组合)是Leader following

编辑:我已经找到了在可视的源代码herehere本文提到的算法的两个简单的实现。您需要稍微将它们从植绒(主要是跟随质心)重新组合到跟随单个领导。这个语言是Processing,类似java的伪代码,所以我希望理解应该没有问题。我之前提到的C++ sourcecode也是可下载的,但没有明确说明引导程序跟踪。
我不知道有任何cocos2d实现。

+0

你可以分享我一些代码?是的,这正是我的意思,但我找不到算法或代码 –

+0

@Alex已添加一些源代码链接到答案 – kostja

1

我有一个简单的解决方案种工作正常。按照cocos2d文档入门课程2,Your first game。执行触摸事件后。使用下面的代码来设置seeker1遵循cocosGuy:

- (void) nextFrame:(ccTime)dt { 

    float dx = cocosGuy.position.x - seeker1.position.x; 
    float dy = cocosGuy.position.y - seeker1.position.y; 
    float d = sqrt(dx*dx + dy*dy); 
    float v = 100; 

    if (d > 1) { 
     seeker1.position = ccp(seeker1.position.x + dx/d * v *dt, 
          seeker1.position.y + dy/d * v *dt); 
    } else { 
     seeker1.position = ccp(cocosGuy.position.x, cocosGuy.position.y); 
    } 
    } 

的想法是步步为营,跟随只需要在一定的速度向领导移动。领导者的方向可以通过代码中显示的来计算。

相关问题