我正在编写一个益智游戏,你可以在一个3x3的网格Map中水平或垂直滑动瓷砖。
如果您选择了一个区块,当您按向上或向下箭头键时,所选区块所在的列将垂直向上或向下移动1个单位。同样适用于水平移动。
这将导致块超过3x3边界。这就是为什么我有另一个规则:当一个区块超过3x3的边界时,它会被传送到空的位置,填充网格Map。方块的水平顺序可以是(1,2,3)。将这一行方块向左滑动1格后,顺序变成(3,1,2)。再做一次吗?它是(2,3,1)。下面是该级别的屏幕截图:
我认为这是一个非常简单的逻辑编码,但它已经证明我错了。它实际上是相当棘手的。
我最初给每个块分配了一个与键盘完全相同的顺序号,所以左下角的块是1,然后是右下角的2,右下角的3 ......每当我按下键盘上的数字键1并按下向上箭头时,我就硬编码它,并将块的垂直顺序(1,4,7)设置为(7,1,4)。
它根本不起作用,因为如果我不将位置重置回正常位置,并开始改变另一个给定的行或列,Map的布局就会变得混乱。这是因为即使我改变了块的物理位置,它们的分配顺序也不会改变,这意味着如果要移动的块不在正常位置,它们可能会重叠到其他块上。
无论如何,这里是一个设计机制的例子:
一、正常位置:
II.将行(1,2,3)向右滑动1个单位
三、立柱(2、5、8)向下滑动1个单位
有人能给予我一些建议吗?它不一定是在实际的代码。我只是需要一些方向去...我现在没有主意了。
1条答案
按热度按时间tcomlyy61#
正如所指出的,你的图像并不十分准确^^
无论如何,可能会有更有效和可扩展的方法,但这里是我将做的第一次迭代-平原直接前进:
此外,我还将通过此
Grid
组件来路由所有移动,以便轻松地将磁贴移动到一起(整行或整列)并保持整洁我希望评论足够清楚
GridElement
组件来处理拖动并通过Grid
路由移动EventSystem
组件Camera
上的PhysicsRaycaster
组件小演示