[英]How to set the position of Actor subclass ignoring the position in draw method
我有這門課:
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
類中,我將actor的位置設置為(0, 0)
。 我只是將它用作某種默認值,因為我希望能夠在它實際繪制在舞台上之前改變它的位置。 原因是我有一些MyActor
對象,我想在舞台上但在不同位置繪制它們。
所以我做了myActor.setPosition(200, 50);
,但它沒有用。
我的問題:我怎樣才能在舞台上繪制myActor
,而不是在draw(Batch, float)
設置的位置?
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());
}
您可以擴展Image
,而不是擴展Actor
,它是Actor
的子類。 Image
allready擁有一個Drawable
(你可以在TextureRegion
的構造函數中使用你的TextureRegionDrawable
)。 然后在你的Image
-subclass中你可以覆蓋draw(Batch batch, float parentAlpha)
,必要時做一些控制並調用suoer.draw(batch, parentAlpha)
然后你的Actor
將被繪制在正確的position
, rotation
, scale
.. 。
編輯: Image
是Widget
的子類。 Widget
本身擴展了Actor
。 來自LibGDX Api:
在窗口小部件邊界內以各種方式顯示Drawable。 優選的尺寸是可拉伸的最小尺寸。 僅在使用TextureRegionDrawable時,才會在繪制時使用actor的縮放,旋轉和原點。
因此,如果您使用TextureRegionDrawable,它還將處理您為Actor
設置的旋轉,縮放和原點Actor
如果需要)。 它擁有Actor
類具有的所有內容和MORE
另一個編輯:正如你所說,你必須存儲其他數據,你可以讓你的MyActor extends Image
。 在MyActor
您可以存儲所需的所有數據,但不再需要存儲圖像,也不必再關注繪圖了。 所以這只是一個建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.