Android 如何在LibGDX中限制摄影机在屏幕上的渲染位置

Android 如何在LibGDX中限制摄影机在屏幕上的渲染位置,android,libgdx,Android,Libgdx,我在LibGDX中安装了一个摄像头,它绘制了一个类似HUD的按钮和状态层。在这中间,我想要一个文本块,它可能比屏幕长,所以我希望能够用手势来环绕它。 我在想,这样做的方法是定义第二个具有大视口的摄影机,即: textCamera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); textCamera.setToOrtho(true, Gdx.graphics.getWidth(

我在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的比例查看,也能够围绕文本平移。就像你在安卓系统上冲浪时上下平移网站一样。

你应该为HUD创建第二个阶段,然后使用定义的平移方法添加到其中。通过检查位置是否大于/小于方法中的某个值,可以轻松控制其相机位置

    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;
            }
        }
    };
Stage//使用与stage相同的视口创建它,并将所有hud的演员添加到其中
...
hudStage.addListener(aListener);
...
最终浮动最大值X=100,最小值X=-100,最大值Y=100,最小值Y=-100;
ActorGestureListener Alitener=新ActorGestureListener()
{
@凌驾
公共作废盘(InputEvent事件、浮点x、浮点y、浮点deltaX、浮点deltaY)
{
//如果您想移动得更慢,可以将deltaX和deltaY除以一些值,如:
//deltaX/=5f;
if(stage.getCamera().position.x+deltaXMIN\ux)
{
stage.getCamera().position.x+=deltaX;
}
if(stage.getCamera().position.y+deltaYMIN\u y)
{
stage.getCamera().position.y+=deltaY;
}
}
};

我想你想要一个剪刀叠?这允许您定义要渲染到的显示的矩形子区域,并且仅渲染该矩形内的像素

  • 此问题的一个答案有一个使用剪刀堆栈的示例:

  • 该功能非常弱,但演示了如何将其与
    SpriteBatch
    一起使用


我没有使用Scene2D-因此Stage不是我的解决方案。我在Scene2D上遇到了与ShaperEnder类似的问题,你为我回答了另一个问题-在随机位置出现白色矩形令人沮丧,加载皮肤时遇到问题,文档质量差等等,所以我放弃了,从零开始使用我自己的,我觉得这应该是我想要的-但是当我遵循文档中的示例时,它所做的只是崩溃。对不起,那次崩溃是我的错。这正是我想要的。