如何让相机跟随LibGDX中的播放器

时间:2014-07-02 14:44:24

标签: camera libgdx render game-development

我是这个论坛的新手,只是为了问这个具体问题而注册:我一直关注视频游戏开发的YouTube网络系列(如何制作2D游戏 - 由EddieVanHalen98制作)但他没有展示我如何使相机跟随特定的精灵。

我的渲染代码如下

public class [ClassName] {
    polkymain game; 
    OrthographicCamera camera;

    public static int PolkyX;
    public static int PolkyY;

    SpriteBatch batch;

    public GameScreen(polkymain game){
        this.game = game;

        camera = new OrthographicCamera();
        camera.setToOrtho(true, 1280, 1240);

        batch = new SpriteBatch();

        PolkyX = 0;
        PolkyY = 0;     
    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0.95F, 0.95F, 0.95F, 0.95F);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);       

        camera.update();
        generalUpdate();

        batch.setProjectionMatrix(camera.combined);     
        batch.begin();          
        batch.draw(Assets.Sprite_Mario_main, PolkyX, PolkyY);       
        batch.end();
    }

    public void generalUpdate(){
        if(Gdx.input.isKeyPressed(Keys.D) || (Gdx.input.isKeyPressed(Keys.LEFT))
        {
            PolkyX += 5;
        }

        if(Gdx.input.isKeyPressed(keys.A) || (Gdx.input.isKeyPressd(Keys.RIGHT))
        {
            PolkyX -= 5;
        }

        if(Gdx.input.isKeyPressed(keys.S) || (Gdx.input.isKeyPressd(Keys.DOWN))
        {
            PolkyY -= 5;
        }

        if(Gdx.input.isKeyPressed(keys.W) || (Gdx.input.isKeyPressd(Keys.UP))
        {
            PolkyY += 5;
        }       
    }

    @Override
    public void resize(int width, int height) {
        // TODO Auto-generated method stub      
    }

    @Override
    public void show() {
        // TODO Auto-generated method stub      
    }

    @Override
    public void hide() {
        // TODO Auto-generated method stub      
    }

    @Override
    public void pause() {
        // TODO Auto-generated method stub      
    }

    @Override
    public void resume() {
        // TODO Auto-generated method stub      
    }

    @Override
    public void dispose() {
        // TODO Auto-generated method stub      
    }
}

另外,我有一个“资产”类,我的所有纹理和精灵编码,不知道这是否相关,我不这么认为现在我想到它... 告诉我你是否需要编码。谢谢!

1 个答案:

答案 0 :(得分:8)

让相机遵循的最简单方法是在每次渲染调用时将其位置设置为精灵的中心,如下所示:

//move your sprite
camera.position.set(sprite.getX(), sprite.getY(), 0);
camera.update();
//draw everything

这将使相机在每次迭代时精确匹配精灵的位置。如果你想要一些更平滑/更复杂的跟随,你应该研究某种形式的插值(更多信息可以找到here)。