Cocos2d如何在另一个精灵之后制作一个精灵?

时间:2011-11-22 09:40:23

标签: cocos2d-iphone sprite

我有一个使用cocos2d的迷宫游戏 我有一个主精灵可以保存“朋友”精灵 一旦“朋友”精灵与主精灵碰撞,“朋友”精灵将跟随主精灵到处都是。 现在我不知道如何使“朋友”精灵跟随静态距离和平滑运动的主精灵。 我的意思是如果主精灵上升,“朋友”将在主精灵的后面。 如果主精灵向左,“朋友”精灵将在主精灵的右边。 请帮帮我并分享一些代码......

2 个答案:

答案 0 :(得分:3)

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

精确算法(以及更多算法)详见wonderful behavior animation paper by Craig Reynolds。还有各个功能的视频和示例源代码(用C ++编写)。

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

编辑:我找到了本文中提到的算法的两个简单实现,其中包含可查看的源代码herehere。你需要稍微重新组合它们从植绒(主要是在质心之后)到跟随一个领导者。语言是Processing,类似于java-like伪代码,所以我希望理解应该没问题。我之前提到的C++ sourcecode也可以下载,但没有明确地介绍领导者的追随者。
我不知道有任何cocos2d实现。

答案 1 :(得分: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);
    }
   }

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