【问题标题】:Tiled map to scene2d actor on multiple layers在多个图层上平铺贴图到 scene2d 演员
【发布时间】:2016-04-29 02:20:28
【问题描述】:

这里的答案正是我想要的,一种将瓷砖变成演员的好方法。

LibGDX: How to make tiled map tiles clickable?

不过我有一个问题,那就是它似乎只在一层上工作。从代码来看,它似乎应该遍历并处理所有层,但似乎并非如此。

我现在的问题是,如果我在平铺的主层之上添加第二层,它只会“看到”该层。它适用于一层。

编辑:两个图层都将在视觉上显示,但我只能与顶层交互。最好的办法是在制作演员时可以忽略顶层,因为它主要用于透明图块和类似的东西。

【问题讨论】:

    标签: java libgdx scene2d tiled


    【解决方案1】:

    如果你把两个演员放在一起,鼠标点击可能只会转到最上面的那个?在这种情况下,您只需创建一层actors(或者甚至为整个地图创建一个actors),然后在其clicked覆盖中,找出您想要处理的图块/层。

    【讨论】:

    • 您应该能够让点击通过,但我不知道如何更改 clickListener 来做到这一点,因为它不返回任何内容。其他侦听器返回真/假,具体取决于单击是否已处理并应停止,还是转到下一层。
    • 也许您可以通过实现InputListener 而不是ClickListener 来做到这一点。你失去了一些便利,但你获得了一些控制权。我不知道它是否会起作用。无论如何,只有一个单击处理程序并从单击位置计算图块坐标应该会更快。
    【解决方案2】:

    根据该示例文章 (LibGDX: How to make tiled map tiles clickable?),您可以执行以下操作之一:

    1) 强制所有顶层单元格使用 IgnoreTileListener(解释如下)

    2) 假设您使用的是静态瓦片地图,或者可以以其他方式向瓦片单元对象添加一个字段,请添加一个名为“忽略”的布尔字段,然后在调用 TiledMapStage.createActorsForLayer() 时检查该单元是否为忽略并使用它来确定您是使用 IgnoreTileListener 还是现有的 TiledMapClickListener 连接它的actor

    “IgnoreTileListener”可以是 InputListener 或 ClickListener,您可以选择,但您将覆盖 IgnoreTileListener 上的 touchDown(),以便您可以强制它返回 false,从而使事件未处理,以便您所需的演员可以监听事件。

    无论哪种方式,您都在有效地使用 InputListener,因为 ClickListener 无论如何都继承自 InputListener。

    https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/utils/ClickListener.html

    无论您最终使用什么来获得所需的输出,我都很想知道(尤其是如果您最终使用这种方法!)

    【讨论】:

      【解决方案3】:

      您是否调试过您的应用程序?您的代码是否无法为每一层生成演员,或者您只是在单击底层时遇到问题?我不确定您链接的代码是否真的在创建演员之前检查当前位置是否有单元格。

      【讨论】:

      • System.out.println(actor.cell + " 已被点击。" + actor.cell.getTile().getId());如果我单击底层上的图块,则返回 null。我检查了调试,如果我添加第二层,它似乎至少创建了两倍的演员,所以它似乎至少这样做了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 2013-04-23
      • 1970-01-01
      • 2020-09-15
      • 2011-06-17
      相关资源
      最近更新 更多