関連するソリューション、つまり、 Scene2d を使用して walkZone を実装および描画するためのソリューションを共有したかっただけです。基本的に、他の人の投稿のさまざまな提案をまとめる必要がありました。
1) ウォークゾーン:
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.PolygonRegion;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.EarClippingTriangulator;
import com.badlogic.gdx.math.Polygon;
import com.mygdx.game.MyGame;
public class WalkZone extends Polygon {
private PolygonRegion polygonRegion = null;
public WalkZone(float[] vertices) {
super(vertices);
if (MyGame.DEBUG) {
Pixmap pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888);
pix.setColor(0x00FF00AA);
pix.fill();
polygonRegion = new PolygonRegion(new TextureRegion(new Texture(pix)),
vertices, new EarClippingTriangulator().computeTriangles(vertices).toArray());
}
}
public PolygonRegion getPolygonRegion() {
return polygonRegion;
}
}
2) Screen
:
次に、目的のリスナーを追加できますStage
。
myStage.addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
if (walkZone.contains(x, y)) player.walkTo(x, y);
// or even directly: player.addAction(moveTo ...
return super.touchDown(event, x, y, pointer, button);
}
});
3) 実装:
WZ コンストラクターに渡される配列は、x、y、x、y... ポイントのセットです。それらを反時計回りに配置すると、機能します(他の方法は確認していませんし、正確にどのように機能するかもわかりません)。たとえば、これは 100x100 の正方形を生成します。
yourScreen.walkZone = new WalkZone(new int[]{0, 0, 100, 0, 100, 100, 0, 100});
私のプロジェクトでは、非常に複雑なポリゴンでも魅力的に機能します。それが役に立てば幸い!!