2012-05-16 47 views
21

我正在寫簡單的太陽系模擬器。 這是我的第一個libgdx項目。我爲主菜單使用Stage和Actors,非常方便,尤其是觸摸事件處理。但是......看看我看到的例子,沒有人在實際的遊戲邏輯中使用演員。我徘徊於如果我應該使用演員作爲星球課的父母還是隻寫我自己的課。 行星將不會觸及,它們將只在兩幀之間移動,因此動作MoveBy的第三個參數必須是幀間的時間。 這就是缺點。使用演員有什麼優點?何時使用libgdx中的actor?什麼是利弊?

+5

我相信很多libGDX例子都支持Stage + Actor,所以這可以解釋爲什麼他們不使用它。 –

回答

36

演員的主要優點是行動,命中測試和觸摸事件,以及演員團隊。

如果您的遊戲邏輯需要,操作可以快速輕鬆地進行補間。

您可以隨時調用stage.hit(X,Y),以返回到任何打你爲它寫邏輯(通常檢查與X,Y,寬度,高度範圍)返回true第一男主角。返回此actor或null以繼續遍歷演員的hit方法尋找一名熱門演員。如果沒有演員被擊中,則返回空值。

點擊用於舞臺的觸摸事件。演員的觸摸方法通過本地座標,舞臺處理物體的重疊,例如,如果一個演員覆蓋另一個演員,使得另一個演員不應該接受touchDown,則在覆蓋演員上返回true以停止對「演員之下」的演員調用touchDown。這還會爲參與者返回true以便調用Actor的touchUp。

您可以將演員分組在一起,以整個演員組爲單位執行動作,觸摸事件等。

一些缺點: 演員需要一個限制功能的舞臺。許多編碼器使用其他邏輯來確定遊戲對象狀態,而不是scene2d Actions(例如box2d)。如果你使用Actor作爲遊戲對象,你可能需要兩個階段,一個用於UI,另一個用於遊戲世界。如果你不使用它們,你可能會使用自己的SpriteBatch和Camera。並且請記住,Actor只有一個抽象的Draw方法,因此您仍然需要創建繪製邏輯。您可能會將TextureRegion或Sprite保留爲Actor的專用字段。如果您想使用自己的更新邏輯,則可以覆蓋act(float delta)方法以獲取增量時間(如果使用Actions,則調用super.act(delta))。

因此,如果您擁有自己的邏輯並且不會使用Stage所提供的大部分功能,則可以節省一些資源並推出自己的特定於應用程序的解決方案。如果你可以在不限制所需功能的情況下使用某些專業技能,那麼就去遊戲邏輯的第二階段。

+1

你可以同時使用Scene2D和box2d,雖然有些東西可能會變得尷尬。一般來說,這是完全可能的,我實際上正在做它。對於動態對象,您只需從物理模型中導出角色的位置即可。這當然意味着「行動」有點毫無意義,因爲動作只能從物理變爲動作,而不是相反。但是,您仍然可以免費獲得輸入處理,事件系統,相機處理和座標映射。行動仍然可以用於沒有物理實體的視覺元素(例如裝備物品,效果精靈等) – Matthias