2016-05-23 62 views
0

在使用libgdx開發的小型遊戲中,我將矛作爲遊戲對象。 我使用Scene2D作爲Actor的一個子類實現了它們。長矛可以旋轉90度。我想讓我的形象中的「speartip」部分作爲「傷害」球員的一部分,杆身應該是無害的。所以當我構建我的矛對象時,我還構造了兩個矩形,它們覆蓋了矛的尖端和軸。但是當我的演員使用setRotation()旋轉時,矩形顯然不會,因爲它們沒有「附加」到矛狀物體上。如何在libgdx中獲得旋轉角色的區域

你對如何處理這種東西有一些建議嗎?下面的代碼。

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()); 

} 

和render方法在同一個類中。我用它來渲染「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

我在我的搜索中遇到過多邊形,但想知道是否有一個「更容易」的解決方案。另外,你可能有建議如何檢查我的紋理的哪一部分,例如感動?不,我有一個矩形的長矛,以及兩個長方形的杆身和尖端。在我將其作爲多邊形實現之前,是否有更好的方法來檢查是否觸摸了「小費」,例如即使紋理被旋轉,將觸摸座標轉換爲紋理座標? – Cuddl3s

+0

你可能只需要幾個'Vector2'即可。您可能需要將紙筆放在紙上,但您大概可以使用符合矛的起源的'Vector2'和大致沿着矛尖的另一個'Vector2',然後嘗試一些自定義邏輯以獲得所需的結果。例如(讓我們稱它們爲'originVec2'&'tipVec2'),如果'tipVec2'在你的播放器內,但'originVec2'大於到播放器的一定距離,和/或'originVec2'和'tipVec2 '在一定範圍內,等等。這種東西只是歸結爲劇烈的搞亂和調整。 – hamham