2017-07-02 5 views
0

Slick2Dで円弧を作成する方法を理解できないようです。基本的に私はそれをオブジェクトとして保存できるようにしたいので、私はそれを使ってコリジョン検出を行うことができますが、Slick2Dはg.drawArc()関数しか持っていません。Slick2Dで円弧を作成する方法は?

私はArc2Dを使いたいと思っていましたが、私が必要とするものには最適ですが、Arc2Dを描画する方法がわかりません。

相続人は、私が持っていたいもののモックアップです:

mockup

これは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; 
} 

答えて

1

ねえ、あなたがSlick2Dと異なる種々の形状を作成することができます基づいておおよそのアークを作成するメソッドを作成しました。

http://slick.ninjacave.com/javadoc/org/newdawn/slick/geom/package-summary.html

彼らはすべて形状を継承し、同じ方法を共有する(例えば交差());:あなたはここでそれらを見ることができます

特定の円弧の形状はありませんが、カーブやポリゴンなどを使用することができます。したがって、たとえば、あなたは、単に行うことができます:

org.newdawn.slick.geom.Curve myCurve = new org.newdawn.slick.geom.Curve(10f, 5f, 9f, 4f); 

を奇妙な探して曲線を作成します。ドキュメントを読んでちょっと遊んでみてください。

レンダリングメソッドでは、g.drawArc(myCurve)を呼び出すか、myCurveで直接描画メソッドを呼び出すことができます(myCurve.draw())。

ドキュメントを読んで、座標を少しだけ再生すると、これを行うことができます。

また、新しいクラスを作成してShapeから継承させる場合は、Slick2Dで独自の図形を作成することができます。

+0

ちょっと、カーブから弧のソートを作成するメソッドを作成しましたが(私のメソッドをメインポストに追加しました)、私はそれをどのように閉じたのか分かりません。 .intersects()は、行自体が接触しているときにのみ機能しますが、カーブの中に何かがあるときはいつでも消えるようにする方法はありますか? – user3263212

+1

あなたが理解しているのであれば、代わりに.contains()を使うか、intersects()の追加として使うことができます。 –

+0

contains()は小さな円の両側に小さなデッドゾーンを作成しました。カーブの両端の間に行を追加し、curve.union(行)を実行し、if(containsを含む) {}。それが完璧に働いて、まさに私が必要なものです。すべてのあなたの助けをありがとう! – user3263212

関連する問題