我有一个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。
答案 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
要点: