1

タッチパッドで回転するスプライトがあります。私が抱えている唯一の問題は、タッチパッドが動いていないときに回転が止まることです。タッチパッドの Y 値が 100% の場合でも、押​​し続けるとスプライトの回転が停止します。タッチパッドが動いているかどうかに関係なく、回転を一定に保つにはどうすればよいですか? 私のコードは以下です

    public class RotationTest implements ApplicationListener {
   private OrthographicCamera camera;
   private SpriteBatch batch;
   private Texture texture;
   private Sprite sprite;
   Stage stage;
   public boolean leonAiming = true;

   @Override
   public void create() {      
      float w = Gdx.graphics.getWidth();
      float h = Gdx.graphics.getHeight();

      camera = new OrthographicCamera(1, h/w);
      batch = new SpriteBatch();

      texture = new Texture(Gdx.files.internal("data/libgdx.png"));
      texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);

      TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275);

      sprite = new Sprite(region);
      sprite.setSize(0.9f, 0.9f * sprite.getHeight() / sprite.getWidth());
      sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2);
      sprite.setPosition(-sprite.getWidth()/2, -sprite.getHeight()/2);

      stage = new Stage();
      Gdx.input.setInputProcessor(stage);

      Skin skin = new Skin(Gdx.files.internal("data/uiskin.json"));
         Texture touchpadTexture = new Texture(Gdx.files.internal("data/touchpad.png"));
         touchpadTexture.setFilter(TextureFilter.Linear, TextureFilter.Linear);     
         TextureRegion background = new TextureRegion(touchpadTexture, 0, 0, 75, 75);
         TextureRegion knob = new TextureRegion(touchpadTexture, 80, 0, 120, 120);
         TextureRegionDrawable backgroundDrawable = new TextureRegionDrawable(background);
         TextureRegionDrawable knobDrawable = new TextureRegionDrawable(knob);
         final Touchpad touchpad = new Touchpad(10, new Touchpad.TouchpadStyle(backgroundDrawable, knobDrawable));
         ChangeListener listener = null;
         touchpad.addListener(new ChangeListener() {

         @Override
         public void changed(ChangeEvent event, Actor actor) {
            sprite.rotate(touchpad.getKnobPercentY());
         }
      });

            touchpad.setBounds(15, 15, 225, 225);
         stage.addActor(touchpad);

   }

   @Override
   public void dispose() {
      batch.dispose();
      texture.dispose();
   }

   @Override
   public void render() {      
      Gdx.gl.glClearColor(1, 1, 1, 1);
      Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

      batch.setProjectionMatrix(camera.combined);
      batch.begin();
      sprite.draw(batch);
      batch.end();
      stage.act();
      stage.draw();
   }

助けてくれてありがとう!

4

1 に答える 1

1

タッチパッドにを登録しChangeListenerています。そのメソッドは、タッチパッドで何かが変化したときにのみ呼び出されます。changed

入力イベントに応答して更新する代わりに、メソッドでタッチパッドの状態をポーリングする必要がありますrender()(したがって、フレームが描画されるたびに、タッチパッドがアクティブな場合は回転を更新します)。

if (touchpad.isTouched()) {
    sprite.rotate(touchpad.getKnobPercentY());
}

フレームレートではなく時間に比例するように、おそらく回転率をスケーリングする必要があります。を参照してくださいGdx.graphics.getDeltaTime()

于 2013-01-31T17:34:29.627 に答える