在LibGDX中移动精灵

时间:2013-11-16 00:34:55

标签: java libgdx

我有几年的Java和Slick2D经验,我试图将游戏移植到libgdx,因为它是一个更好的库。但是,我在屏幕上移动精灵有一个简单的问题。这个API必须有一些我不理解的范例。我将我的代码提炼成以下内容。它识别输入并通过我的整个实体和网络系统在服务器之间运行它,然后精灵停留在同一位置。任何帮助都会很棒。

我的 create()方法:

public void create() {
    //Check to see if we are using external server or localhost
    ClientNetworkManager.setLocalhostAsHost(Constant.useLocalhost, this);

    //Begin application setup
    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();

    camera = new OrthographicCamera(1280,900);
    batch = new SpriteBatch();


    //Load assets into memory
    texture = new Texture(Gdx.files.internal("Sprites/Ash.png"));
    //texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);

    sprite = new Sprite(texture);
    sprite.setSize(256,256);
    sprite.setPosition(44, 666);


    //Begin external network setup
    setPlayerPointer(null);
    this.connection = new ClientConnectionThread(this);
    getClientConnectionThread().setCurrentPing(0);
}


My render() method:

        public void render() {
                //Render logic
                Gdx.gl.glClearColor(1, 1, 1, 1);
                Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

                if (connection.isActive() && !Constant.performEssentialTasksOnly) {
                    InputManager.handlePlayerInput(this);
                    batch.setProjectionMatrix(camera.combined);
                    camera.update();
                    batch.begin();

                    batch.draw(sprite,playerPointer.getCurrentX(),playerPointer.getCurrentY());
                    System.out.println(playerPointer.getCurrentX());
                    batch.end();
                }
    }

getCurrentX / Y方法的值都是正确报告的,所以这不是问题。我觉得它一定是显而易见的。

2 个答案:

答案 0 :(得分:0)

你可以打电话

sprite.setX(xpos);

改变实际位置。

如果您打算使用平铺地图,请不要忘记按下SpriteBatch,这应该由renderer.getSpriteBatch()方法返回。

答案 1 :(得分:0)

你没有使用Sprite位置来渲染它,你实际上正在使用它,就好像它是一个普通的TextureRegion

batch.draw(sprite,playerPointer.getCurrentX(),playerPointer.getCurrentY());
System.out.println(playerPointer.getCurrentX());

你在哪里更换这个playerPointer?

更像这样:

sprite.setPosition(playerPointer.getCurrentX(),playerPointer.getCurrentY())
sprite.draw(batch);

但同样,问题是 playerPointer 没有正确的值(它们不会改变)。