Cocos2d如何使一个精灵跟随另一个精灵?

4

我有一个使用cocos2d的迷宫游戏,有一个主要的精灵可以拯救"朋友"精灵。 一旦"朋友"精灵与主要精灵碰撞,"朋友"精灵就会跟随主要精灵的脚步。 现在我不知道如何使"朋友"精灵以静态距离和平滑的移动方式跟随主要精灵。 我的意思是,如果主要精灵向上移动,"朋友"精灵将在主要精灵后面。 如果主要精灵向左移动,"朋友"精灵将在主要精灵的右边。 请帮助我并分享一些代码...


你会使用Box2D、Chipmunk还是纯Cocos2d?如果使用纯Cocos2d,你会使用动画来移动还是按像素移动? - Guntis Treulands
2个回答

4
你可以通过使用主精灵的位置作为友方精灵的目标来实现以下行为。这将涉及实现分离(保持最小距离),凝聚(保持最大距离)和缓动(使运动平滑)。
确切的算法(以及更多内容)在Craig Reynolds的 奇妙的行为动画论文中详细说明。还有单独功能的视频和示例源代码(使用C ++编写)。
您需要的算法(它是多个较简单算法的组合)是 领导者跟随

编辑:我已经找到了两个实现论文中提到的算法的简单实现,代码可以查看这里这里。你需要稍微重新组合它们从群集(主要是跟随重心)转变为跟随单个领导者。该语言是Processing,类似于Java伪代码,所以我希望理解不应该有问题。我之前提到的C++源码也可以下载,但并没有明确的领导者跟随功能。
我不知道是否有任何cocos2d的实现。


你能分享一些代码给我吗?是的,那正是我的意思,但我找不到算法或代码。 - Alex Moskalev
@Alex 已经在答案中添加了一些源链接。 - kostja

1

我有一个简单的解决方案,基本上运行良好。按照cocos2d文档中的入门课程第二课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);
    }
   }

这个想法是在每一步中,跟随者只需要以一定的速度向领导者移动。朝向领导者的方向可以通过代码中显示的计算得出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接