【问题标题】:Position of a puzzle piece in Flash Jigsaw puzzleFlash 拼图中拼图的位置
【发布时间】:2011-08-31 08:47:22
【问题描述】:

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

剪辑 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 返回到原始位置。

如何才能做到这一点。 MovieClips 的注册点在左上角。

【问题讨论】:

    标签: arrays flash actionscript-3 logic


    【解决方案1】:

    携带一个物品,上面有16个领域的职业信息。如果存在剪辑,请将相应的属性设置为 true。替代方案:一个不错的解决方案是简单地使用 int var 和二进制和:

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

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

    你测试一个字段是否被这样占用:

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

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

    SUM += fieldNumber
    

    如果剪辑离开其领域:

    SUM -= fieldNumber
    

    总结:

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

    【讨论】:

    • 我更喜欢使用对象方法。我对逻辑与或等有点生疏。但我想我已经有了基本的想法。你能给我一些很好的链接来说明这种代码是否使用“int var and binary sum”。如果您有任何示例代码,请发送。我想在未来研究这种方法。 bobbyfrancisjoseph@gmail.com
    • 要使用二进制和,你真的不需要了解位运算符的概念。我什至不得不查看文档来解释它们。您现在基本上只需要拥有一个数字并能够检查该数字是否包含某个值。为此,值需要是 2 的幂。它与 unix 文件权限相同。
    猜你喜欢
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多