2014-02-18 41 views
1

我剛啓動libgdx,這看起來很簡單,但我不明白。 我的渲​​染畫面對象方法調用render方法從WorldRenderer:在libgdx中渲染無法更新繪製的新值

public World world; 
public void render() { 

    spriteBatch.begin(); 
     drawBlocks(); 
     drawBob(); 
    spriteBatch.end(); 
    if (debug) 
     drawDebug(); 
} 
private void drawBob() { 
    Bob bob = this.world.getBob(); 
    Log.e("inside drawBob",this.world.getBob().getPosition().x +"dadas"); 
    bobFrame = bob.isFacingLeft() ? bobIdleLeft : bobIdleRight; 
    if(bob.getState().equals(State.WALKING)) { 
     bobFrame = bob.isFacingLeft() ? walkLeftAnimation.getKeyFrame(bob.getStateTime(), true) : walkRightAnimation.getKeyFrame(bob.getStateTime(), true); 
    } 
    spriteBatch.draw(bobFrame, bob.getPosition().x * ppuX, bob.getPosition().y * ppuY, Bob.SIZE * ppuX, Bob.SIZE * ppuY); 

//屏幕呈現方法

void render(float delta) { 
     Gdx.gl.glClearColor(0.1f, 0.1f, 0.1f, 1); 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
     controller.update(delta); 
     renderer.render(); 
     } 

我有一個updateBob方法來更新世界鮑勃位置。 這裏是控制器的更新:

public void update(float delta) { 
    processInput(); 
    Vector2 pos = new Vector2(7,7); 
    //bob.setPosition(pos); 
    bob.getPosition().x += 1; 
    bob.update(delta); 
} 

應用create()方法

public void create() { 
    setScreen(new GameScreen()); 
    world = new World(); 
    renderer = new WorldRenderer(world, true); 
    controller = new WorldController(world); 
    //Gdx.input.setInputProcessor(this); 
} 

裏面的方法,我更新了它和值變化。但鮑勃在渲染中的位置不會改變,所以我不能讓鮑勃移動。 請告訴我哪裏錯了。

+0

你正在看StarAssault教程xD這也是我的第一個教程xD首先,我建議你使用相機,以避免'ppuX,ppuY'。閱讀此http://code.google.com/p/libgdx/wiki/OrthographicCamera和此http://www.acamara.es/blog/2012/02/keep-screen-aspect-ratio-with-different-resolutions -using-libgdx /如果你不明白它只是谷歌或在這裏問。回到你的問題:你什麼時候調用updateBob方法?在一個框架中'bob.getPosition()。x'的值是多少?另一方面呢?你是否在每個渲染週期中清除屏幕? – Springrbua

+0

好的,謝謝你的教程。當在屏幕中觸摸時,我更新了bob,並且bob.getPosition()。x的值也是相同的,即使我設置了bob.getPosition()。x + = 1。渲染方法\t public void render(float delta){ \t \t Gdx.gl.glClearColor(0.1f,0.1f,0.1f,1); \t \t Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); \t \t //controller.update(delta); \t \t renderer.render(); \t \t \t} –

+0

因此,如果您使用bob.getPosition()。x + = 1,bob.position.x不會改變。 ''//controller.update(delta);'你是否在評論中設置了更新?如果你把'controller.update(delta)'和'public void render(float delta)'作爲你的問題的代碼發佈,會更好。只需編輯它。 – Springrbua

回答

1

在聊天中討論後,我們發現問題所在。如果您在ApplicationListener中覆蓋render(),則必須致電super.render()以確保調用​​的Screen。同樣應該算作pause()和其他方法ApplicationListener即可。

+0

真的很有用初學者瞭解 –