我有一个使用cocos2d的迷宫游戏 我有一个主精灵可以保存“朋友”精灵 一旦“朋友”精灵与主精灵碰撞,“朋友”精灵将跟随主精灵到处都是。 现在我不知道如何使“朋友”精灵跟随静态距离和平滑运动的主精灵。 我的意思是如果主精灵上升,“朋友”将在主精灵的后面。 如果主精灵向左,“朋友”精灵将在主精灵的右边。 请帮帮我并分享一些代码......
答案 0 :(得分:3)
您可以使用主精灵的位置作为朋友精灵的目标来实现以下行为。这将涉及实现分离(保持最小距离),凝聚力(保持最大距离)和缓和(使运动平稳)。
精确算法(以及更多算法)详见wonderful behavior animation paper by Craig Reynolds。还有各个功能的视频和示例源代码(用C ++编写)。
您需要的算法(它是多个更简单的算法的组合)是Leader following
编辑:我找到了本文中提到的算法的两个简单实现,其中包含可查看的源代码here和here。你需要稍微重新组合它们从植绒(主要是在质心之后)到跟随一个领导者。语言是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);
}
}
这个想法是在每一步,追随者只需要以一定的速度走向领导者。朝向领导者的方向可以通过代码中显示来计算。