2013-09-25 4 views
0

Этот код делает изображение мерцания границы (Flash) при перемещении влево, вправо, вниз или вверх. Почему перемещение рамки изображения перемещается, даже если я использую значение дельта-значения метода класса Screen().Спринт мерцает при перемещении libgdx

package com.me.mygdxgame; 
    import com.badlogic.gdx.Gdx; 
    import com.badlogic.gdx.Input.Keys; 
    import com.badlogic.gdx.InputProcessor; 
    import com.badlogic.gdx.graphics.GL10; 
    import com.badlogic.gdx.graphics.OrthographicCamera; 
    import com.badlogic.gdx.graphics.Texture; 
    import com.badlogic.gdx.graphics.Texture.TextureFilter; 
    import com.badlogic.gdx.graphics.g2d.Sprite; 
    import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
    import com.badlogic.gdx.math.Vector3; 
    public class MoveSpriteExample extends GdxTest implements InputProcessor { 
     Texture texture; 
     SpriteBatch batch; 
     OrthographicCamera camera; 
     Vector3 spritePosition = new Vector3(); 
     Sprite sprite; 
     public void resize (int width, int height) { 
     } 

     public void create() { 

      float w = Gdx.graphics.getWidth(); 
      float h = Gdx.graphics.getHeight(); 
      batch = new SpriteBatch(); 
      camera= new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
      camera.setToOrtho(false, w, h); 
      texture = new Texture(Gdx.files.internal("data/grasswall.png")); 
      texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); 
      sprite = new Sprite(texture); 

      sprite.setSize(32, 32); 
      spritePosition.y=100; 

      sprite.setPosition(spritePosition.x,spritePosition.x); 
      lastUpdateTime = System.nanoTime(); 
     } 

    public void Update(float Delta) 
    { 
     if (Gdx.input.isKeyPressed(Keys.D)==true) 
     { 
      spritePosition.x += 150*(Delta/1000000000.0); 

     }else if (Gdx.input.isKeyPressed(Keys.A)==true) 
     { 
      spritePosition.x -= 150*(Delta/1000000000.0); 
     } 
     else if (Gdx.input.isKeyPressed(Keys.Z)==true) 
     { 
      spritePosition.y -= 150*(Delta/1000000000.0); 
     } 
     else if (Gdx.input.isKeyPressed(Keys.W)==true) 
     { 
      spritePosition.y += 150*(Delta/1000000000.0); 
     } 
    } 
    float lastUpdateTime; 
    float currentTime; 
     public void render() { 
      currentTime = System.nanoTime(); 
      Gdx.gl.glClearColor(1, 1, 1, 1); 
      Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

      camera.update(); 

      Update(currentTime - lastUpdateTime); 

      sprite.setPosition(spritePosition.x,spritePosition.y); 

      batch.setProjectionMatrix(camera.combined); 

      batch.begin(); 

      sprite.draw(batch); 

      batch.end(); 

      lastUpdateTime = currentTime; 
     } 
    } 

пожалуйста обеспечивают код с образцом

+0

возможно дубликат [мелькать объект перемещения изображения в libgdx настольного приложения] (http://stackoverflow.com/questions/18959312/flickering-object-image-movement-in-libgdx-desktop-app) – BennX

+0

Есть еще код на пути выполнения рендеринга, чем то, что вы показываете здесь? Я предполагаю, что есть 'render' в' GdxTest', который вызывает это? –

ответ

1

Как я сказал в последнем посте вас, вы должны взглянуть на учебник! Прежде всего, вам не нужно самостоятельно вычислять время дельты. Я уже публикую, как вы его получите в последнем посте для вас.

Плохо дает вам короткий пример с движущимся спрайтом без мерцания. Сперва вот ApplicationListener. (Не GDXtest)

public class MainClass implements ApplicationListener { 
    private Screen currentScreen = null; 

    @Override 
    public void create() { 
     Texture.setEnforcePotImages(false); 
     this.currentScreen = new TestScreen(); 
    } 

    @Override 
    public void dispose() { 
     this.currentScreen.dispose(); 

    } 

    @Override 
    public void render() { 
     this.currentScreen.render(Gdx.graphics.getDeltaTime()); 
    } 

    @Override 
    public void resize(int width, int height) { 
     this.currentScreen.resize(width, height); 
    } 

    @Override 
    public void pause() { 
     this.currentScreen.pause(); 
    } 

    @Override 
    public void resume() { 
     this.currentScreen.resume(); 
     ; 
    } 
} 

Это preaty просто и, как вы можете видеть, что это действительно требует автоматически рендер экрана со временем дельты! this.currentScreen.render(Gdx.graphics.getDeltaTime()).

Следующее, что вам нужно, это простой экран. Итак, что-то, что реализует Screeninterface. Id действительно рекомендую вам использовать сцену Scene2D со сценой. Но вот пример без.

public class TestScreen implements Screen { 
    private Sprite mySprite; 
    private SpriteBatch batch = new SpriteBatch(); 

    public TestScreen() { 
     this.mySprite = new Sprite(new Texture(
       Gdx.files.internal("data/appicon.png"))); 
     this.mySprite.setPosition(50f, 50f); 
    } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(1, 1, 1, 1); 
     Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
     this.update(delta); 
     this.batch.begin(); 
     this.mySprite.draw(batch); 
     this.batch.end(); 
    } 

    public void update(float delta) { 
     if (Gdx.input.isKeyPressed(Keys.D) == true) { 
      mySprite.setX(mySprite.getX() + 150 * delta); 
     } else if (Gdx.input.isKeyPressed(Keys.A) == true) { 
      mySprite.setX(mySprite.getX() - 150 * delta); 
     } else if (Gdx.input.isKeyPressed(Keys.Z) == true) { 
      mySprite.setY(mySprite.getY() - 150 * delta); 
     } else if (Gdx.input.isKeyPressed(Keys.W) == true) { 
      mySprite.setY(mySprite.getY() + 150 * delta); 
     } 
    } 

    @Override 
    public void resize(int width, int height) { 
    } 

    @Override 
    public void show() { 
    } 

    @Override 
    public void hide() { 
    } 

    @Override 
    public void pause() { 
    } 

    @Override 
    public void resume() { 
    } 

    @Override 
    public void dispose() { 
    } 
} 

Regardas и ознакомьтесь с учебником. (Here is again the beginning of it)

+0

Сэр, я все еще получаю flickring на моем изображении border –

+0

Сэр я все еще получаю flickring на границе моего изображения при перемещении. Я уже тестирую значение дельта-значения из Screen Render() Method.simply Мне нужно знать, что это дельта-проблема (manualy/libgdx delta) или если у меня есть проблема с версией –

+0

, не используйте фильтр – BennX

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