Slick2Dで円弧を作成する方法を理解できないようです。基本的に私はそれをオブジェクトとして保存できるようにしたいので、私はそれを使ってコリジョン検出を行うことができますが、Slick2Dはg.drawArc()関数しか持っていません。Slick2Dで円弧を作成する方法は?
私はArc2Dを使いたいと思っていましたが、私が必要とするものには最適ですが、Arc2Dを描画する方法がわかりません。
相続人は、私が持っていたいもののモックアップです:
これはARC2Dでやるし、それを描画するためのJFrameを使用するのは簡単ですが、私はこのような何かを作成する方法を知りませんスリックで。
編集:私が見ることができる解決法は、すべての衝突検出にArc2Dを使用して、弧を描く必要があるときにmyArc.x、myArc.y、myArc.widthなどを使用するだけです。 g.drawArc()を使用していますが、Arc2D cantでは、slick2dシェイプで.interesects()関数を使用しています。
アイブ氏は、曲線
public Curve createArc(float centerX, float centerY, float radius, float theta){
// creates a 180 degree arc around centerX and Y, theta (in degrees) is used for rotation
float x1,x2,x3,x4,y1,y2,y3,y4;
x1 = (float) (radius*(1-Math.cos(Math.toRadians(theta)))) + startX - radius;
y1 = (float) (radius*(1-Math.sin(Math.toRadians(theta)))) + startY - radius;
x2 = (float) (Math.sqrt(25*(radius*radius)/9)*(Math.cos(Math.toRadians(theta-36.87-90)))) + startX;
y2 = (float) (Math.sqrt(25*(radius*radius)/9)*(Math.sin(Math.toRadians(theta-36.87-90)))) + startY;
x3 = (float) (Math.sqrt(25*(radius*radius)/9)*(Math.cos(Math.toRadians(theta-53.13)))) + startX;
y3 = (float) (Math.sqrt(25*(radius*radius)/9)*(Math.sin(Math.toRadians(theta-53.13)))) + startY;
x4 = (float) (radius*(1-Math.cos(Math.toRadians(theta+180)))) - radius + startX;
y4 = (float) (radius*(1-Math.sin(Math.toRadians(theta+180)))) - radius + startY;
Vector2f vectorTest1 = new Vector2f(x1,y1);
Vector2f vectorTest2 = new Vector2f(x2,y2);
Vector2f vectorTest3 = new Vector2f(x3,y3);
Vector2f vectorTest4 = new Vector2f(x4,y4);
Curve curve = new Curve(vectorTest1,vectorTest2,vectorTest3,vectorTest4);
return curve;
}
ちょっと、カーブから弧のソートを作成するメソッドを作成しましたが(私のメソッドをメインポストに追加しました)、私はそれをどのように閉じたのか分かりません。 .intersects()は、行自体が接触しているときにのみ機能しますが、カーブの中に何かがあるときはいつでも消えるようにする方法はありますか? – user3263212
あなたが理解しているのであれば、代わりに.contains()を使うか、intersects()の追加として使うことができます。 –
contains()は小さな円の両側に小さなデッドゾーンを作成しました。カーブの両端の間に行を追加し、curve.union(行)を実行し、if(containsを含む) {}。それが完璧に働いて、まさに私が必要なものです。すべてのあなたの助けをありがとう! – user3263212