2016-08-15 151 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

你知道正方形/長方形

  • 寬度和方形的高度/矩形
    • 旋轉角度你可以找到圓與中心之間的夾角矩形/平方點。

    下面是它看起來像在正方形/長方形類。

    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;  
    }