【发布时间】: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