1

ステージで俳優として使用している画像のタッチを検出するのを手伝ってくれませんか。画像は実際には、透明な領域がたくさんある長い斜めのブラシです。問題は、ブラシ画像の透明領域に触れるとClickListener、画像のトリガーも発生することです。ClickListener画像の透明部分ではなく、可視画像がタッチされたときにのみ呼び出されるようにします。

libgdx-0.9.4 ライブラリを使用しています。これが私の簡単なコードです。

import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.ClickListener;


Image brushImg = new Image(ImageCache.getTexture("brush"));
brushImg.width = mStage.width()*0.75f;
brushImg.height = mStage.height()*0.75f;

brushImg.setClickListener(new ClickListener() {
    @Override
    public void click(Actor actor, float x, float y) {          
        SoundFactory.play("brush");   
    }
}
4

1 に答える 1

2

libGDX ステージ コードが、アクタに別のバウンディング ボックス/バウンディング リージョンを設定するための特定のサポートを持っているとは思いません。ただし、これを回避するためにできることが他にもいくつかあります。

まず、ClickListener「無効」なタッチを破棄できます。たとえば、単純化された境界領域がある場合 (斜めのブラシの場合、角のある長方形を使用できます)。または、非常に正確にしたい場合は、タッチ領域を下にあるテクスチャにマッピングして、ピクセルがクリアかどうかを確認できます。

libGDX API ドキュメントから、アクタのhitメソッドをオーバーライドして、タッチの計算方法を変更できるようです (おそらく、ヒットが成功した場合にのみ ClickListener が呼び出されます)。これにより、ClickListener が呼び出される前に交差をテストできます (これにより、タッチがステージ上の他のオブジェクトに転送される可能性があります)。

于 2012-11-18T17:04:50.513 に答える