0

touchDown()イメージ アクターのイベントで簡単なテストを作成しました。イベントはステージでは機能しますが、俳優では機能しません。コードは次のとおりです。

InputProcessor親クラスのコンストラクターにを設定します ( AbstractScreen)。

Gdx.input.setInputProcessor(this.stage);

サブクラスで:

private TextureAtlas atlas;
private Image boardImg;

public void show(){
    super.show(); 

    atlas = new TextureAtlas(Gdx.files.internal("data/packs/mainMenu.atlas"));      
    AtlasRegion board = atlas.findRegion("board");

    boardImg = new Image(board);

    boardImg.addListener(new InputListener(){
           public boolean touchDown(InputEvent event, float x, float y, int pointer, int    button){
               Gdx.app.log("aaaa", "down");
               return true;
           }
    });

    stage.addActor(boardImg);

    stage.addListener(new InputListener() {
          public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
               Gdx.app.log("aaaa", "stage down");
               return true;
          }
    });     
}


@Override
public void resize(int width, int height) {
    super.resize(width, height);        
    boardImg.setPosition(stage.getWidth()/2 - boardImg.getWidth()/2, stage.getHeight()/4);  
}

デスクトップとアンドロイドの両方でテストしています(結果は同じです)。「ステージダウン」イベントは発生しますが、俳優のイベントは発生しません。ステージイベントなしでもやってみました。

4

3 に答える 3

0

touchDown()問題は、ステージのメソッドがtrueを返すため、イベントが「消費」され、その子やアクターに伝播されず、touchDown()メソッドboardImgが呼び出されないためだと思います。

于 2012-11-10T19:50:07.960 に答える
0

これらの作業をすべて実行します。

  1. boardImg.setTouchable(Touchable.enabled)

  2. ステージ リスナーで false を返すか、そのリスナーをクリアします。

  3. 親クラスで setInputProcessor(this.stage) を呼び出さないで、代わりに子クラスで呼び出してください。

于 2012-11-09T21:21:19.760 に答える
0

サイズがないため、画像はタッチ イベントを受け取りません。

ドキュメントを注意深く読んでください。

アクターは、その境界内で入力イベントを受け取るために、その境界を指定する必要があることに注意してください。

boardImg = new Image(board)アクターの幅と高さを設定しないことを知っておいてください。したがって、手動で作成する必要があります。ピクセル パーフェクト サイズで作業しているとします。

boardImg = new Image(board);
boardImg.setWidth(board.getWidth());
boardImg.setHeight(board.getHeight());

それはトリックを行います。幸運を。

于 2014-08-12T19:59:06.363 に答える