Libgdx,actor 中的视口
Libgdx, viewport in actor
是否可以将视口放在自定义actor中,这样视口的宽度和高度就是actor的宽度和高度,渲染将从actor位置开始,而不是从(0,0)开始。
Stage
是二维场景图。它具有层次结构,这意味着添加到 Group
的 Actor
s 应该只在给定的 Group
中呈现。移动组也会将所有子级移动到里面。通过 clipBegin()
和 clipEnd
你还可以 "cut off" actor 之外的所有东西,这也是 Viewport
在设置 glViewport
时所做的事情.
因此,无论您尝试做什么,您可能都不需要额外的视口。如果您仍然认为您需要一个,您可以创建一个 ActorViewport extends Viewport
来获得一个 Actor
字段。您必须覆盖 apply(boolean)
方法并同步 worldWidth、worldHeight、screenX、screenY、screenWidth 和 screenHeight 变量以匹配 Actor
。请记住,每次演员更改时都必须更新视口,在最坏的情况下每帧都会更新。
感谢没有人解决方案非常简单:
public class ActorViewport extends Viewport
{
private Actor m_actor;
public ActorViewport(Actor actor, int worldWidth, int worldHeight, Camera camera)
{
m_actor = actor;
setWorldSize(worldWidth, worldHeight);
setCamera(camera);
}
@Override
public void update(int screenWidth, int screenHeight, boolean centerCamera)
{
setScreenPosition((int)m_actor.getX(), (int)m_actor.getY());
setScreenSize((int)m_actor.getWidth(), (int)m_actor.getHeight());
}
}
是否可以将视口放在自定义actor中,这样视口的宽度和高度就是actor的宽度和高度,渲染将从actor位置开始,而不是从(0,0)开始。
Stage
是二维场景图。它具有层次结构,这意味着添加到 Group
的 Actor
s 应该只在给定的 Group
中呈现。移动组也会将所有子级移动到里面。通过 clipBegin()
和 clipEnd
你还可以 "cut off" actor 之外的所有东西,这也是 Viewport
在设置 glViewport
时所做的事情.
因此,无论您尝试做什么,您可能都不需要额外的视口。如果您仍然认为您需要一个,您可以创建一个 ActorViewport extends Viewport
来获得一个 Actor
字段。您必须覆盖 apply(boolean)
方法并同步 worldWidth、worldHeight、screenX、screenY、screenWidth 和 screenHeight 变量以匹配 Actor
。请记住,每次演员更改时都必须更新视口,在最坏的情况下每帧都会更新。
感谢没有人解决方案非常简单:
public class ActorViewport extends Viewport
{
private Actor m_actor;
public ActorViewport(Actor actor, int worldWidth, int worldHeight, Camera camera)
{
m_actor = actor;
setWorldSize(worldWidth, worldHeight);
setCamera(camera);
}
@Override
public void update(int screenWidth, int screenHeight, boolean centerCamera)
{
setScreenPosition((int)m_actor.getX(), (int)m_actor.getY());
setScreenSize((int)m_actor.getWidth(), (int)m_actor.getHeight());
}
}