我在LibGDX中设置了一个摄像头,它可以绘制一个类似HUD的按钮和状态层。在这个中间,我想要一个文本块,它可能比屏幕更长,所以我希望能够使用手势平移它。
我在想,这样做的方法是定义第二个带有大视口的摄像机,即:
textCamera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
textCamera.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
然后在写出大部分文本之前将其应用于我的批处理。但是,我怎么能限制它,使得这个textCamera只会在屏幕上绘制内容,比如说,(0,100) - > (600,800)。在这种情况下,屏幕宽度,例如,宽600,高度可能是1000,所以我想在顶部和底部留一个间隙。
所以,基本上我想要一个大视口,将所有文本写入视口,能够以1:1的比例查看它,还能够平移文本。就像你在Android上冲浪时上下网站一样。
答案 0 :(得分:1)
您应该为HUD创建第二阶段,然后使用定义的 pan 方法添加ActorGestureListener。您可以通过检查位置是否大于/低于方法中的某个值来轻松控制其摄像机位置。
Stage hudStage; //create it with even the same viewport as stage and add to it all hud's actors
...
hudStage.addListener(aListener);
...
final float MAX_X = 100, MIN_X = -100, MAX_Y = 100, MIN_Y = -100;
ActorGestureListener aListener = new ActorGestureListener()
{
@Override
public void pan(InputEvent event, float x, float y, float deltaX, float deltaY)
{
//if you want to move slower you can divide deltaX and deltaY by some value like:
//deltaX /= 5f;
if( stage.getCamera().position.x + deltaX < MAX_X && stage.getCamera().position.x + deltaX > MIN_X )
{
stage.getCamera().position.x += deltaX;
}
if( stage.getCamera().position.y + deltaY < MAX_Y && stage.getCamera().position.y + deltaY > MIN_Y )
{
stage.getCamera().position.y += deltaY;
}
}
};
答案 1 :(得分:1)
我想你想要一个剪刀堆?这允许您定义要渲染的显示的矩形子区域,并且仅渲染该矩形内的像素。
此问题的答案之一是使用剪刀堆栈的示例: https://gamedev.stackexchange.com/questions/67024/how-do-i-crop-a-cameras-viewport
libgdx scissorstack wiki page非常弱,但展示了如何将其与SpriteBatch
一起使用。