如何限制相机在LibGDX中向屏幕呈现的位置

时间:2015-10-04 06:31:53

标签: android libgdx

我在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上冲浪时上下网站一样。

2 个答案:

答案 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)

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