在 libGDX 中为 "candy crush - like" 游戏构建网格
Building grid for "candy crush - like" game in libGDX
我开始为 android 创建原型,candy crush - 类似游戏,使用 libGDX。那是我第一次使用这个游戏库,所以如果有人能指出我创建网格的有效方法,我将不胜感激。 Currentlu 我是这样做的:我有二维数组 Ball[][] 和二维数组 Vector2[][]。在网格构造函数中,我计算每个插槽的坐标,然后,当我填充网格时,我从池中获取 Ball 并分配适当的网格坐标(Vector2[row][column],Ball[row][column])。每个球都记住自己的行和列,当我交换糖果时,当 MoveToAction 完成时,我交换数组中的球并从新位置为它们分配新坐标。
但我现在确定这是否是最好的主意。我正在考虑创建一个带有值对 Pair 的二维数组,并在交换期间将球重新分配给他们的新对。它看起来更干净,但由于网格是游戏中非常重要的一部分,我想知道最好的方法是什么?其他人如何解决交换问题?两种解决方案的优缺点是什么?
看来您对数据结构不够慷慨。你有一个 Ball 对象,它包含每个 属性 个唯一的 Ball 对象本身,然后你有一个数组来保存那些很棒的球。但是你有一个数组来保存每个球的位置,这就是你的问题。
如果你考虑一下你这样做的方式,球阵列将球保持在指定的行和列,然后在网格阵列中你将保持球应该设置的位置。这非常令人困惑,可以通过更多地使用对象来更容易地完成。
假设我们创建了一个 class GridSlot 来表示网格上的一个插槽。我们可以删除 Ball 和 Vector2 数组而忘记它们。相反,我们将创建一个 GridSlot[] 类型的数组,它将保存数组中的每个槽(请记住,它是一个一维数组)。在 GridSlot class 中,我们可以创建两个变量 x 和 y,它们代表插槽的位置,我们可以创建另一个变量 ball,它代表插槽中的 Ball。现在,在初始化所有内容时,当您通常用位置加载 vector2 数组时,我们可以创建一个新的 GridSlot 对象并将正确的位置设置为该对象。我们将为网格中的每个插槽执行此操作,然后当我们想要将球移动到插槽时,您所要做的就是在 GridSlot 对象中设置球变量。
我开始为 android 创建原型,candy crush - 类似游戏,使用 libGDX。那是我第一次使用这个游戏库,所以如果有人能指出我创建网格的有效方法,我将不胜感激。 Currentlu 我是这样做的:我有二维数组 Ball[][] 和二维数组 Vector2[][]。在网格构造函数中,我计算每个插槽的坐标,然后,当我填充网格时,我从池中获取 Ball 并分配适当的网格坐标(Vector2[row][column],Ball[row][column])。每个球都记住自己的行和列,当我交换糖果时,当 MoveToAction 完成时,我交换数组中的球并从新位置为它们分配新坐标。
但我现在确定这是否是最好的主意。我正在考虑创建一个带有值对 Pair 的二维数组,并在交换期间将球重新分配给他们的新对。它看起来更干净,但由于网格是游戏中非常重要的一部分,我想知道最好的方法是什么?其他人如何解决交换问题?两种解决方案的优缺点是什么?
看来您对数据结构不够慷慨。你有一个 Ball 对象,它包含每个 属性 个唯一的 Ball 对象本身,然后你有一个数组来保存那些很棒的球。但是你有一个数组来保存每个球的位置,这就是你的问题。
如果你考虑一下你这样做的方式,球阵列将球保持在指定的行和列,然后在网格阵列中你将保持球应该设置的位置。这非常令人困惑,可以通过更多地使用对象来更容易地完成。
假设我们创建了一个 class GridSlot 来表示网格上的一个插槽。我们可以删除 Ball 和 Vector2 数组而忘记它们。相反,我们将创建一个 GridSlot[] 类型的数组,它将保存数组中的每个槽(请记住,它是一个一维数组)。在 GridSlot class 中,我们可以创建两个变量 x 和 y,它们代表插槽的位置,我们可以创建另一个变量 ball,它代表插槽中的 Ball。现在,在初始化所有内容时,当您通常用位置加载 vector2 数组时,我们可以创建一个新的 GridSlot 对象并将正确的位置设置为该对象。我们将为网格中的每个插槽执行此操作,然后当我们想要将球移动到插槽时,您所要做的就是在 GridSlot 对象中设置球变量。