2016-05-29 16 views
1

私は単純なことに問題があります - 私は俳優のためにドラッグインテントしようとしていますが、私は奇妙な効果を見ます - 私は俳優をドラッグしようとすると点滅を開始し、ここでは短いビデオです:https://youtu.be/KpGujQ7KHc0touchDraggedで奇妙な振る舞い

俳優は単純です:

public class Item extends Actor { 
    private String id; 
    private TextureRegion texture; 

    public Item() { 
     this.id = "passport"; 

     texture = PicturesData.getPicture(getId()); 
     setSize(texture.getRegionWidth(), texture.getRegionHeight()); 

     addListener(new DragListener() { 
      @Override 
      public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
       return true; 
      } 

      @Override 
      public void touchDragged(InputEvent event, float x, float y, int pointer) { 
       Log.add("Dragged: " + x + ", " + y); 
       setPosition(x, y); 
      } 
     }); 
    } 

    public String getId() { 
     return id; 
    } 

    @Override 
    public void draw(Batch batch, float parentAlpha) { 
     batch.draw(texture, getX(), getY()); 
    } 
} 

画面があまりにも基本的なものです:

public class GameScreen implements Screen { 
    private Stage stage; 

    public GameScreen() { 
     stage = new Stage(new StretchViewport(800, 600)); 
     Gdx.input.setInputProcessor(stage); 

     Item item = new Item(); 

     stage.addActor(item); 
    } 

    @Override 
    public void show() { 
    } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); 

     stage.act(delta); 
     stage.draw(); 
    } 

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

    } 

    @Override 
    public void pause() { 

    } 

    @Override 
    public void resume() { 

    } 

    @Override 
    public void hide() { 

    } 

    @Override 
    public void dispose() { 

    } 
} 

私はそれが起こっている理由は分からない、あなたは私を助けてくださいだろうか?

+0

このアクタの位置が変更されたコードの他の場所はありますか? –

+0

いいえ。画面コードで投稿を更新しました。それはかなり基本的です。 – Pasha

答えて

1

Pasha、DragListenerに問題はありません。このアイテムを使用する(ハードコードされた開始位置):

public class Item extends Image { 
    private String id; 

    public Item(String id) { 
     super(PicturesData.getPicture(getId()); 
     this.id = id; 
     setPosition(50, 50); 
     addListener(new DragListener() { 
      @Override 
      public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
       return true; 
      } 

      @Override 
      public void touchDragged(InputEvent event, float x, float y, int pointer) { 
       moveBy(x - getWidth()/2, y - getHeight()/2); 
      } 
     }); 
    } 

    public String getId() { 
     return id; 
    } 
} 
+0

私には同じバグです、libgdxバージョンは何を使用していますか? 3でも、私も1.9.1で試してみました。おそらく、libgdxのgithubで報告するべきです... – Pasha

+0

今すぐコードを試してください:-) – WonderfulWorld

+0

はい、うまくいきます! javadocで 'touchDragged'の' X'と 'Y'が新しい位置ではなく、以前の位置との差分であることを書いてください!どうもありがとうございました! – Pasha

0

DragListenerが正しく動作しない理由は、リスナーが正しく機能するために必要なtouchDown関数をオーバーライドしたためです。コードを次のように変更してください:

addListener(new DragListener() { 
     @Override 
     public void drag(InputEvent event, float x, float y, int pointer) { 
      Log.add("Dragged: " + x + ", " + y); 
      setPosition(x, y); 
     } 
    }); 
+0

私が知っているように、これは 'touchDown'を上書きするのは正しいです。 「touchDragged」のjavadocから:_マウスボタンまたは指のタッチがどこにでも移動したときに呼び出されますが、touchDownが前にtrueを返した場合のみ**マウスボタンまたはtouch_の場合**です。とにかく、私は 'touchDown'を削除しようとしました - 結果はまだ同じです:( – Pasha

+0

Tried。同じエラー... – Pasha