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

Posted

技术标签:

【中文标题】如何让相机跟随 LibGDX 中的播放器【英文标题】:How do I make the camera follow the player in LibGDX 【发布时间】:2014-08-23 10:10:19 【问题描述】:

我一直在关注“如何制作 2D 游戏”here,但没有显示如何让相机跟随特定的精灵。

我的渲染代码如下

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 */ 

    @Override
    public void show()   /* TODO */ 

    @Override
    public void hide()  /* TODO */ 

    @Override
    public void pause()  /* TODO */ 

    @Override
    public void resume()  /* TODO */ 

    @Override
    public void dispose()  /* TODO */ 

另外,我有一个包含所有纹理和精灵编码的“资产”类,不知道这是否相关。现在想想,我不这么认为。

【问题讨论】:

我已经格式化了你的代码。您遗漏了类声明,因此请替换顶部的 [ClassName] 以及您可能遗漏的任何其他缺失信息。 【参考方案1】:

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

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

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

【讨论】:

以上是关于如何让相机跟随 LibGDX 中的播放器的主要内容,如果未能解决你的问题,请参考以下文章

相机不跟随宇宙飞船

如何制作平滑的相机跟随算法?

如何阻止音乐曲目在 Libgdx 中循环播放

由于 Time.deltaTime,C#/Unity 相机跟随抖动

uniapp如何让APP播放的音频跟随系统铃声模式

uniapp如何让APP播放的音频跟随系统铃声模式