拼图块在Flash拼图游戏中的位置

时间:2011-08-31 08:47:23

标签: arrays flash actionscript-3 logic

我有一个4 * 4网格。我有16个MovieClip分散在网格周围。每个MovieClip都是40 * 40,它们是可拖动的。用户可以将MovieClip拖放到网格中。每个剪辑都有一个正确的位置。例如

剪辑0:x = 0,y = 0

剪辑1:x = 40,y = 0

剪辑2:x = 120,y = 0

剪辑3:x = 160,y = 0

剪辑15:x = 160,y = 160

当所有剪辑都处于正确位置时,游戏结束。因此很容易检查游戏结束。使用循环和ENTER_FRAME监视所有剪辑的位置。

我无法解决一个小问题。当用户拖动剪辑时,它将捕捉到网格中的位置,无论它是否正确。在这种情况下,可捕捉的位置将是40的倍数。两个夹子可以咬合到一个位置,这是必须避免的。如果我把一个剪辑放在(40,120)我不应该在那里删除另一个MovieClip。实际上,我应该能够得到一些迹象告诉我这个位置已被占用。

使用该指示我将使MovieClip返回原始位置。

如何才能实现这一目标。 MovieClip的注册点是topleft。

1 个答案:

答案 0 :(得分:2)

携带有关16个区域占用信息的对象。如果存在剪辑,请将相应属性设置为true。替代方案:一个漂亮的解决方案是简单地使用int var和二进制和:

1 = first field
2 = second field
4 = third field
8 = ...

如果前三个职位被占用,您的总和将为1 + 2 + 4 = 7

您可以测试字段是否被占用:

if ((SUM & testFieldNumber) == testFieldNumber) THEN occupied

在用户释放鼠标时,您需要计算剪辑将捕捉到的位置。使用您的对象或二进制求和项检查字段是否被占用。如果是这样,请将剪辑的位置重置为以前的状态。如果该字段仍然是空闲的,则将该字段添加到您的对象或binaray总和:

SUM += fieldNumber

如果剪辑离开其字段:

SUM -= fieldNumber

要点:

  • 始终存储每个剪辑的最后一个有效位置
  • 存储字段的占用(对象或二进制和)
  • 计算用户释放鼠标时可能的剪辑位置(字段)
  • 如果字段是空闲的:在那里移动剪辑,存储字段占用(在对象或bin中)。将剪辑的新位置存储为最后一个有效位置。
  • 如果字段已被占用:将剪辑移动到以前的位置
  • 当剪辑离开其前一个位置时,更新字段占用列表(对象或二进制数)