2014-01-31 84 views
0

我有這個類:如何設置演員子類忽略平局方法的位置的位置

public class MyActor extends Actor{ 
TextureRegion region; 

public MyActor(TextureRegion region) 
{ 
    this.region = region; 
} 

@Override 
public void draw(Batch batch, float parentAlpha) { 
    super.draw(batch, parentAlpha); 
    batch.draw(region, 0, 0); 
} 

} 

我利用它在這裏是這樣的:

public class MyGame implements ApplicationListener { 

Stage stage; 
MyActor myActor; 

@Override 
public void create() { 
    stage = new Stage(0, 0, false); 
    myActor = new MyActor(new TextureRegion(new Texture(
      Gdx.files.internal("texture.png")))); 

    myActor.setPosition(200, 50); 
    stage.addActor(myActor); 

} 

@Override 
public void render() { 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    stage.act(Gdx.graphics.getDeltaTime()); 
    stage.draw(); 
} 
} 

MyActor類我將演員的位置設置爲(0, 0)。我只是將它用作某種默認設置,因爲我希望能夠在舞臺上實際繪製之前改變它的位置。原因是我有幾個MyActor的對象,我想把它們全部放在舞臺上,但在不同的位置。

所以我做了myActor.setPosition(200, 50);,但它沒有奏效。

我的問題:如何在draw(Batch, float)以外的位置上繪製myActor

回答

2
public void draw(Batch batch, float parentAlpha) { 
    super.draw(batch, parentAlpha); 
    batch.draw(region, 0, 0); 
} 

刪除super.draw請致電此處。現在它不應該做任何事情,如果它會做任何事情,它可能會導致問題。

此外,你抱怨說,你的演員位置沒有使用。那是因爲你沒有使用它。

嘗試這樣代替:

public void draw(Batch batch, float parentAlpha) { 
    batch.draw(region, getX(), getY()); 
} 
+0

但是爲什麼我們應該在Actor中使用getX(),getY()?我的意思是,爲什麼我們需要演員呢?如果我們仍然需要根據一些外部值來計算位置。 – rdbmsa

+0

'Actor'是Scene2D的一部分,它是一個場景圖。場景圖中的每個節點都有一個相對於其父節點的本地座標系。所以getX()和getY()返回* local *座標。由此產生的立場是基於外部價值觀,但你不必關心這一點。場景圖將爲你照顧。如果您的場景中沒有實體的層次結構,那麼幾乎沒有優勢。除了能夠註冊EventListener來處理點擊等。 – noone

0

不是擴展Actor可以擴展Image,這是Actor一個子類。 Image已擁有Drawable(您可以在TextureRegionDrawable的構造函數中使用您的TextureRegion)。然後在你的Image -subclass可以覆蓋draw(Batch batch, float parentAlpha),如果有必要做一些controlls並調用suoer.draw(batch, parentAlpha)有你Actor將在合適的positionrotationscale繪製...

編輯:Image是的子類WidgetWidget本身延伸Actor。 來自LibGDX Api:

在小部件邊界內顯示可繪製,縮放的各種方式。 首選大小是drawable的最小大小。只有使用TextureRegionDrawable時,演員的縮放比例,旋轉角度和原點才能在繪圖時使用 。

因此,如果您使用的是TextureRegionDrawable它也將處理您設置的旋轉,縮放和起源你Actor,如果你需要。它有Actor類有一切,更多

另一個編輯:正如你說你要存儲的其他數據,你可以簡單地擁有你的MyActor extends Image。在您的MyActor中,您可以存儲所需的所有數據,但不需要再存儲該圖像,也無需擔心繪圖了。所以這只是一個建議。

+0

你可以告訴我downvote的原因,所以我可以改善我的答案,並幫助他人。謝謝 – Springrbua

+0

我無法擴展圖像,因爲MyActor類不僅僅是一個圖像。 –

+0

圖像包含Actor所做的一切以及更多內容。所以,如果你擴展Actor並在其中存儲一個TextureRegion,那麼你可以或多或少的像直接擴展Image一樣。 – Springrbua