【问题标题】:Building grid for "candy crush - like" game in libGDX [closed]在 libGDX 中为“糖果迷恋”游戏构建网格 [关闭]
【发布时间】:2015-07-08 16:56:01
【问题描述】:

我开始使用 libGDX 为 android 制作原型,糖果迷 - 类似游戏。那是我第一次使用这个游戏库,所以如果有人能指出我创建网格的有效方法,我将不胜感激。 Currentlu 我这样做是这样的:我有二维数组 Ball[][] 和二维数组 Vector2[][]。在网格构造函数中,我计算每个插槽的坐标,然后,当我填充网格时,我从池中获取 Ball 并分配适当的网格坐标(Vector2[row][column],Ball[row][column])。每个球都记住自己的行和列,当我交换糖果时,当 MoveToAction 完成时,我交换数组中的球并从新位置为它们分配新坐标。
但我现在确定这是否是最好的主意。我正在考虑创建一个带有值对 Pair 的二维数组,并在交换期间将球重新分配给他们的新对。它看起来更干净,但是由于网格是游戏中非常重要的一部分,我想知道最好的方式是什么?其他人如何解决交换问题?两种解决方案的优缺点是什么?

【问题讨论】:

  • 你不应该假设人们知道 Candy Crush 是什么,即给出一个简短的解释。
  • 对不起,你是对的。我应该更具体。

标签: java arrays libgdx swap


【解决方案1】:

您似乎对数据结构不够慷慨。你有一个 Ball 对象,它拥有 Ball 对象本身独有的每个属性,然后你有一个数组来保存那些很棒的球。但是你有一个数组来保存每个球的位置,这就是你的问题。

如果您考虑一下您的操作方式,球阵列将球保持在指定的行和列,然后在网格阵列中保持球应设置的位置。这非常令人困惑,并且可以通过更多地使用对象来更轻松地完成。

假设我们创建了一个类 GridSlot 来表示网格上的一个槽。我们可以删除 Ball 和 Vector2 数组并忘记它们。相反,我们将创建一个 GridSlot[] 类型的数组,它将保存数组中的每个插槽(请记住,它是一个一维数组)。在 GridSlot 类中,我们可以创建两个变量 x 和 y,它们代表插槽的位置,我们可以创建另一个变量 ball,代表插槽中的球。现在在初始化所有内容时,当您通常加载带有位置的 vector2 数组时,我们可以改为创建一个新的 GridSlot 对象并将正确的位置设置为该对象。我们将为网格中的每个插槽执行此操作,然后当我们想要将球移动到插槽时,您所要做的就是在 GridSlot 对象中设置 ball 变量。

【讨论】:

  • 这主意不错,我会实施的。但我看到一个问题。如果没有二维数组,我不知道每个网格槽的行和列,因此无法确定要交换的球。示例:单击球并将手指向左拖动,来自网格槽行、列的球,必须与来自 raw、colum-1 的球交换位置。所以我认为数组 GridSlot[][] 效果更好?
  • 是的,这也不是问题!二维或一维数组都可以,只要确保正确生成位置即可。
  • 我会的。我目前正在实施这一点。没有完成喷射,但它看起来很漂亮和简单。谢谢百万人!
猜你喜欢
  • 2022-06-13
  • 2014-02-22
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多