4

ボタンとしてステージを持つアクターを使用しています。touchDown/touchUp イベントがアクター上で問題なく発生したことを検出できますが、ユーザーがアクターをタップしてから指をアクターからドラッグすると、touchUp イベントは発生しません。代わりに exit イベントを使用しようとしましたが、決して発生しません。私のプログラムでは、 touchUp/touchDown イベントは、ボタンが押されているかどうかに応じて動きとボタンの色を決定します。そのため、ボタンが再び上下にクリックされるまで、永久に「押し下げられた」ボタンを残しました。

私が使用しているコードの例:

stage.addListener(new InputListener() {

    public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
        Actor actor = stage.hit(x, y, true);
        if (actor != null){
            System.out.println("touchDown: " + actor.getName().toString()); 
        }
        return true;
    }

    public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
        Actor actor = stage.hit(x, y, true);
        if (actor != null){
                System.out.println("touchUp: " + actor.getName().toString());           
                }
        }

    public void exit(InputEvent event, float x, float y, int pointer, Actor toActor){
        System.out.println("exit");
    }
});
4

2 に答える 2

3

変えたら

stage.addListener(new InputListener() {});

stage.addListener(new ClickListener() {});

TouchUp 呼び出しを認識します。また、TouchDown と Exit の呼び出しも引き続き処理できます。

于 2014-02-02T05:28:30.650 に答える
1

私も同じ問題を抱えていました。boolean isDownGameScreen クラスのフィールドとして変数を作成することで修正しました。背景画像で touchDown が発生するたびに、isDown 変数を true にし、touchUp が発生すると isDown = false にします。そうすれば、常に touchUp が発生します。次に、render メソッドの GameScreen で、isDown が true かどうかを確認します。true の場合は、タッチがアクターと交差するかどうかを確認します。

if (isDown) {
   if (pointIntersection(myActor, Gdx.input.getX(), Gdx.input.getY())) {
                // do something
   }
} else {
  // reverse the effect of what you did when isDown was true
}

ここで、pointIntersection メソッドは次のとおりです。

public static boolean pointIntersection(Image img, float x, float y) {
    y = Gdx.graphics.getHeight() - y;
    if (img.x <= x && img.y <= y && img.x + img.width >= x && img.y + img.height >= y)
        return true;

    return false;
}

それは私が見つけた唯一の回避策です。それでも、それはあまりきれいではありませんが、私にとってはうまくいきます。

于 2013-03-28T19:30:35.423 に答える