2014-02-18 2 views
1

Я просто запускаю libgdx, и это выглядит просто, но я не понимаю. Мой метод отрисовки в объект экрана будет вызывать метод визуализации от WorldRenderer:render in 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 для обновления мире позиции боб. здесь обновление контроллера «s: создать

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

Применение() метод

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

Внутри метода, я обновил его и изменение значения. но позиция bob в рендере не изменяется, поэтому я не могу заставить Боб двигаться. Пожалуйста, скажите мне, где это неправильно.

+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-resolution -using-libgdx /, и если вы не понимаете это просто Google для этого или попросите здесь. Вернемся к вашему вопросу: когда вы называете метод 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.position.x не меняется, если вы используете bob.getPosition(). X + = 1? '//controller.update (delta);' вы установили обновление в комментарии? Было бы лучше, если бы вы разместили 'controller.update (delta)' и 'public void render (float delta)' как код в своем вопросе. Просто отредактируйте его. – Springrbua

ответ

1

После обсуждения в чате мы обнаружили проблему. Если вы переопределите render() в своем ApplicationListener, вы должны позвонить super.render(), чтобы убедиться, что render(float delta) в Screen называется. То же самое следует учитывать для pause() и других методов от ApplicationListener до.

+0

действительно полезен для начинающий понять –

Смежные вопросы