【问题标题】:How to implement a board game like interface in LibGDX using Scene2D如何使用 Scene2D 在 LibGDX 中实现类似棋盘游戏的界面
【发布时间】:2014-05-09 02:37:22
【问题描述】:

我刚开始游戏开发,并决定使用LibGDX 制作一个 2048 克隆来学习基础知识。

我开始使用一个简单的 2D 数组来实现它,它可以工作,但问题是没有任何动画。因此,例如,如果在位置[0][0] 处有一个图块,并且在用户滑动屏幕后它必须移动到[0][3],则该转换会立即发生(因为我基本上只是更新我的二维数组并重新渲染瓷砖)。

有人告诉我,这种类似于棋盘游戏的 UI 是使用 Scene2D 的完美场景。我可以使用 Actors 轻松实现基本的 4x4 网格,但我的问题是,如何使用 Scene2D 正确管理本质上是 2D 结构的内容?

如果用户滑动板(左、右、上、下)并更新 2D 数组,我已经有算法来处理移动图块的位置,但感觉就像我使用的是 Scene2D,使用这个二级二维数组数据结构太过分了。

目前我的做法是:

  1. 使用我的图块创建 2D 数组和 Scene2D
  2. 当用户滑动时,使用图块的新位置更新二维数组
  3. 遍历 Scene2D 中的演员,并将其与我更新的 2D 数组中的图块进行比较。如果有变化,为它们设置动画(从图块的原始位置到最终位置的基本过渡)

我只是觉得我这里有不必要的步骤和不必要的数据结构。

处理这种情况的正确方法是什么?

感谢有用的建议,谢谢!

【问题讨论】:

  • 我不确定你是如何进行转换的,但是Scene2DActions 类,它可以让你轻松创建这些转换:actor.addAction(Actions.moveTo(x,y,duration))

标签: java libgdx


【解决方案1】:

您是否将您的图块放在 TableLayout 中?正如您所发现的,仅将其绘制出来是行不通的。

要为其设置动画,您需要定义一个 MoveAction。

MoveToAction moveAction = new MoveToAction();
moveAction.setPosition(300f, 0f);
moveAction.setDuration(10f);
myActor.addAction(moveAction);

示例复制自: http://www.gamefromscratch.com/post/2013/12/09/LibGDX-Tutorial-9-Scene2D-Part-2-Actions.aspx

如果您使用 TableLayout,我不确定如何实现。

【讨论】:

  • 是的,这就是我喜欢 Scene2D 的主要原因,移动对象非常简单。困扰我的事情是必须为基本相同的数据保留 2 个数据结构。我确信有更好的方法来做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
相关资源
最近更新 更多