2016-08-15 10 views
0

私のゲームでは、プレーヤーは円のテクスチャであり、背の高い狭く回転する四角いテクスチャがたくさんあります。私はIntersectorクラスを衝突のために使用する方法を知っていますが、私が発見したものから回転を考慮しません。テクスチャからシェイプを作成し、それを境界として使用できる方法やクラスがありますか?libgdxを使って回転する四角形との衝突?

+1

これは[数学](http://math.stackexchange.com/)のような感じです。 Googleもあなたの友人です。 – markspace

+0

@markspaceそうですね。私はSprite/Textureから衝突境界を抽出する方法を必要としています。これはIntersectorのようなもので使用することができます。私はこの疑問から駄目を捜したが、何も見つけていない。 – Wyatt

+0

これは最善の解決策ではありませんが、ポリゴンを作ることができます。ポリゴンは回転できます。 – eric

答えて

0

これはクラスがあるかどうかわかりませんが、私は簡単なアイデアを思いつきました。

人々は太陽が地球の周りを何年も回転していると信じていました。彼らは地球から見たので。 回転する四角形が私たちの世界であり、実際に回転していないと仮定できます。両方の方法で我々はいつ昼夜を知る。

これらの写真を見ると、よりよく理解できます。

enter image description here

この場合は、衝突をチェックするのは難しいです。

enter image description here

そして、この場合簡単です。しかし実際には2つのケースが同じです。

だからあなたはあなたが、円と中心との間の角度を見つけることができ、正方形/長方形

  • 幅と、正方形/長方形
  • の高さの

    • 回転角度を知る2.

      にケースを変更長方形/正方形の点。

    ここで、正方形/長方形のクラスのようになります。

    public boolean check_collision(Player player) 
    { 
    Vector2 pvector=new Vector2(player.xcenter , player.ycenter); 
    Vector2 svector=new Vector2(this.xcenter , this.ycenter); 
    float radi=player.radius; 
    if(pvector.dst2(svector) < 
    (width + radi) * (width + radi) + 
    (height + radi) * (height + radi))// dont check if player is too far for collision 
    { 
        Vector2 rvector= pvector.sub(svector);// rvector from square center to player center 
        rvector.setangle(rvector.angle()+ this.rotation);//make sure rotations is CCW 
        pvector=rvector.add(svector); //new player vector to check collision 
        return new Rectangle(pvector.x-radi/2f ,pvector.y-radi/2f,radi,radi).overlaps(new Rectangle(svector.x-width/2f ,svector.y-height/2f,width,height)); 
        //assume that player is also rectangle because we already checked worst case with if condition. 
    } 
    return false;  
    } 
    
  • 関連する問題