【问题标题】:libgdx: Fixed-position-actor in between dependently moving actorslibgdx:独立移动演员之间的固定位置演员
【发布时间】:2014-01-28 12:31:20
【问题描述】:

在 libgdx 中使用 scene2d,我希望一个演员相对于屏幕保持固定,但同时有其他演员,即在其上方(覆盖)和下方相互缩放和移动,如下所示:

我发现固定演员(红色)在其他演员之间有一个 z 级别的唯一方法是使其成为图中蓝色演员的孩子(如绿色),但随后它正在缩放并与其父级(蓝色)一起移动。

我试图通过像这样覆盖固定actor中的draw()来解决这个问题:

    public void draw(SpriteBatch batch, float parentAlpha){
        Vector2 coord = new Vector2(SCREEN_X, SCREEN_Y);
        getStage().screenToStageCoordinates(coord);
        stageToLocalCoordinates(coord);
        setPosition(coord.x, coord.y);
        setScale(1/getParent().getScaleX());
        super.draw(batch, parentAlpha);
    }

...但结果是它在两个地方(每隔一段时间)绘制,从而产生闪烁效果。

有没有更好的方法来达到这个效果?

如果重写 draw() 是要走的路,那么我在实现中哪里出错了?

【问题讨论】:

  • 如果你将一个演员添加到一个组中,它会随着组的缩放而演员的缩放与组的缩放相关,据我所知。我真的不明白你想要达到什么目的。你能解释一下吗?试着举个例子或者告诉我这些物体在现实生活中代表什么(例如绿色的是一个人,红色的是一件武器或其他什么)
  • 蓝色是组。绿色被添加到它并随着它缩放和移动。这一切都很好,也是我想要的。然后我希望在两者之间显示另一个演员,以便它覆盖蓝色并且本身可以被绿色覆盖,但同时相对于屏幕保持固定。
  • 所以红色的东西的SIZE应该总是一样的吧?还是位置?你会调整组的大小吗?
  • 固定红色的大小和位置。组正在移动和扩展。但是找到了一个解决方案:将上面代码中的第 4 行替换为:getParent().stageToLocalCoordinates(coord)。但不确定是否覆盖 draw() 是最好的方法。
  • 所以你把红色加到组里,只是它可以在2的中间?

标签: libgdx


【解决方案1】:

调用父级的stageToLocalCoordinates()而不是它自己的作品:

   public void draw(SpriteBatch batch, float parentAlpha){
        Vector2 coord = new Vector2(SCREEN_X, SCREEN_Y);
        getStage().screenToStageCoordinates(coord);
        getParent().stageToLocalCoordinates(coord);
        setPosition(coord.x, coord.y);
        setScale(1/getParent().getScaleX());
        super.draw(batch, parentAlpha);
    }

不确定这是否是最有效的解决方案...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多