【问题标题】:Snake/Worm movement on 2D envrimoment2D 环境中的蛇/蠕虫运动
【发布时间】:2012-08-15 16:33:00
【问题描述】:

这是我的目标: 我有多个精灵来制作人物。第一个精灵(在 n 个精灵的数组上,其中 n 是段数)是头部,其他精灵必须跟随它。 所以,如果头部改变他的角度然后移动(在头部指向的方向),其他精灵必须跟随头部,就像蛇/蠕虫一样。 我正在用 cocos2D 做这个,但不是那么相关,因为我认为我没有这个概念,因为我知道 cocos2D,但这不是问题(不是框架)。 那么,我该怎么做呢?其他精灵怎么能完美地跟随头部?游戏示例是 App Store 上的 Death Worm 或 Super Mega Worm

如果需要,我可以发布我正在使用的代码(效果不好)和结果图片,但我不知道是否需要。

谢谢。

【问题讨论】:

  • 假设头部朝左,然后转了 90 度,头部朝上。随着头部继续笔直向上,您是否希望其他身体部分继续向左笔直移动直到它们在头部下方,然后笔直向上移动 - 或者身体部分是否应该立即开始向左和向上斜向移动,更像是一条真正的蛇?
  • 可能不像真的蛇,我觉得你说的第一个更好,在游戏中我看到人物先走老路

标签: algorithm math animation graphics 2d


【解决方案1】:

我会简单地将每个部分的所有位置存储在一个数组列表/向量中。 on Draw 根据游戏计算计算下一个头部位置,然后删除列表中最旧的 (pos==0) 项目并在列表中的位置绘制精灵。

如果这看起来与 Alexey 的回答相似,我很抱歉,我只是认为这可能是一个更简单的实现。

【讨论】:

  • 如果我只移动1px的头部怎么办?你说,把所有的位置放在数组上,但是如果想象这种情况:所有的碎片/部分都是水平的,只将头部旋转45°,然后将头部移动1px:其他精灵的位置和旋转是多少?不能是数组中的位置
  • 首先,我会推荐一个 arrayList (或类似的构造),它将处理元素的移动。在这种情况下,我将直接操作列表中代表头部的最后一项,并将其余项留在原处。如果这看起来有用的话,你也可以有一个单独的 this 来轮换部分。
【解决方案2】:

为小动物的每个部分都有一个坐标数组,包括头部。

如果它需要直线移动(不改变方向),则移动数组值,以便尾部(最后)段获得相邻段的坐标,该段获得其前段的坐标,依此类推,对于头部段,你设置了新的头部坐标,它等于旧坐标增加了方向向量 d:

dx dy direction  
 0 -1 up
 0 +1 down
-1  0 left
+1  0 right

如果要改变方向,适当改变方向向量,然后做同样的数组移位和头部坐标更新。

【讨论】:

    【解决方案3】:

    您需要手动设置每个角色的位置。必须在重复调用的计划方法中计算和设置新位置。

    sprite.position = ccp(newX,newY);
    

    你也可以参考这个:Cocos2D set sprite position in relation to another sprite

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多