2016-05-23 7 views
0

小さなゲームで、私はlibgdxを使って開発しています。私はゲームオブジェクトとして槍を持っています。 私は、Actor2のサブクラスとしてScene2Dを使用してそれらを実装しました。スピアは90度の角度で回転できます。私はプレーヤーの "傷つける"部分として私のイメージのちょうど "speartip"部分を持ちたいと思う、シャフトは無害である。だから、私がスピアオブジェクトを構築するとき、私はまた、スピアの先端とシャフトをカバーする2つの長方形を構築します。しかし、私の俳優がsetRotation()を使って回転したとき、矩形は明らかに槍ではありません。libgdxで回転したActorの領域を取得する方法

この種のものを処理する方法についていくつかの提案がありますか?以下のコード。

public TrapEntity(Texture texture, float pos_x, float pos_y, float width, float height, Vector2 center, 
        float rotation, Rectangle hurtZone, Rectangle specialZone) { 
    super(texture, pos_x, pos_y, width, height, center, rotation); 

    this.hurtZone = new Rectangle(hurtZone.getX(), hurtZone.getY(), hurtZone.getWidth(), hurtZone.getHeight()); 
    this.specialZone = new Rectangle(specialZone.getX(), specialZone.getY(), specialZone.getWidth(), specialZone.getHeight()); 

} 

同じクラスのレンダリングメソッド。私は「hurtZone」矩形の境界を描画するためにそれを使用する:

@Override 
public void draw(Batch batch, float alpha){ 
    super.draw(batch, alpha); 
    batch.end(); 
    sr.setProjectionMatrix(batch.getProjectionMatrix()); 
    sr.setTransformMatrix(batch.getTransformMatrix()); 
    sr.begin(ShapeRenderer.ShapeType.Line); 
    sr.setColor(Color.RED); 
    sr.rect(hurtZone.getX(), hurtZone.getY(), hurtZone.getWidth(), hurtZone.getHeight()); 
    sr.end(); 
    batch.begin(); 

} 

答えて

1

四角形を回転させることができない、私は同じようなことをしなければならなかったし、解決策を見つけることに苦労しました。私が見つけた最も良い解決策は、多角形を使うことです。あなたはこのようなことをします。

//Polygon for a rect is set by vertices in this order 
    Polygon polygon = new Polygon(new float[]{0, 0, width, 0, width, height, 0, height}); 

    //properties to update each frame 
    polygon.setPosition(item.getX(), item.getY()); 
    polygon.setOrigin(item.getOriginX(), item.getOriginY()); 
    polygon.setRotation(item.getRotation()); 

次に、回転したポリゴンの範囲内にポイントがあるかどうかを確認します。

polygon.contains(x, y); 
+1

私も検索でポリゴンを見つけましたが、「より簡単な」ソリューションがあるかどうか疑問に思っていました。また、私のテクスチャのどの部分が触れられたかを確認する方法についての提案がありますか?いいえ、私は槍の境界の矩形と、シャフトと先端の2つの長方形を持っています。ポリゴンとして実装する前に、「チップ」に触れたかどうかを確認するためのより良い方法がありますか?テクスチャが回転していてもタッチ座標をテクスチャ座標に変換しますか? – Cuddl3s

+0

あなたはいくつかの 'Vector2'でそれを行うことができます。紙にペンを付ける必要があるかもしれませんが、おそらく槍の起源に続く1つの 'Vector2 'と、槍の先端にほぼ沿ったもう1つの' Vector2'を持っていて、あなたが望む結果を得るためにいくつかのカスタムロジックを試してみてください。たとえば、「originVec2」と「tipVec2」と呼ぶことができますが、「tipVec2」があなたのプレーヤーの中にあり、「originVec2」がプレーヤーまでのある距離よりも大きい場合、および/または「originVec2」と「tipVec2」の間の角度'はある範囲内にあります。この種のものは、激しい混乱と微調整になります。 – hamham

関連する問題