1

考虑一个简单的 Cocos2d 游戏,由 1x20 网格上的五个水平多米诺骨牌组成(宽度为 20 个方格,每个多米诺骨牌的宽度为 2,多米诺骨牌不能重叠)。多米诺骨牌可以在网格中水平滑动。由于它们受限于网格,它们的垂直位置是恒定的。

基本移动的逻辑很简单:点击和拖动移动多米诺骨牌,直到CGRectIntersectsRect确定何时击中另一张多米诺骨牌。此时多米诺骨牌刚刚移动到位。

“高级”运动的逻辑更为复杂。在这里将多米诺骨牌推向另一张多米诺骨牌应该像两个连续的火车车厢一样移动两个多米诺骨牌,只要它们有空间。显然,可以以这种方式移动三个、四个等多米诺骨牌。

虽然高级运动代码更复杂,但我不认为这是没有希望的。我勾勒出几个概念:

  • “后多米诺骨牌”是多米诺骨牌用户正在拖动
  • “前多米诺骨牌”位于所有移动多米诺骨牌的前面,决定何时停止、何时向组中添加另一张多米诺骨牌等
  • “移动多米诺骨牌”是当前在“火车”中的所有多米诺骨牌组合

我认为这种方法是可行的。但是,鉴于许多极端情况的可能性很高,我不相信这是最简单的方法。例如,将三个连续的多米诺骨牌卡入到位可能需要防止对齐后重叠、对齐后间隙等的逻辑。

如何通过使用 Box2d 来避免一些复杂的逻辑?

我认为一个简单的物理引擎完全消除了对前骨牌、后骨牌等概念的需求。因此,我正在考虑这种方法。

4

0 回答 0