2014-10-01 147 views
3

我已經在Libgdx中構建了一個遊戲,它使用傳遞給某些屏幕(Splash/Intro/Game/Menu/Pause等)的單個FitViewport。Libgdx - 如何在單個視口內旋轉屏幕?

每個屏幕都有自己的舞臺,其中包含演員組 - 我已經編寫了一個自定義渲染循環以允許屏幕淡入/淡出,幻燈片或呈現在對方後面 - 這非常棒。

我現在想要一個'UI'屏幕,它將在智能手機上旋轉以匹配它們的方向(遊戲中的其他所有內容都不會旋轉)。

我可以通過在SpriteBatch上使用TransformMatrix來進行視覺上的工作,但不會影響舞臺的「觸摸」檢測(或debugdraw),而且舞臺內部似乎沒有辦法做到這一點(localtoparentcoords允許旋轉和縮放,但不變換)

記住,它不會是「廣場」(的FitViewport強制16:9比例),因此需要翻譯以及旋轉......

注:我已經試過用相機搞亂,但這是錯誤的範例 - 相機是同一事物的不同觀​​點 - 我想要將不同的東西(轉換和旋轉)繪製到相同的視圖中!

另請注意:我已經開始創建我自己的Screen/Stage類的版本來做到這一點 - 我認爲它可能比踢現有的代碼更快地工作,但我會很驚訝,如果我'第一個想要這個的人?

+0

真棒使用libgdx,實際上聽起來像你知道你在做什麼。只是我的意見,但我不認爲有人玩遊戲,需要特定的方向甚至知道菜單屏幕可以旋轉,即使他們知道他們可以,他們也不會實際旋轉。我個人不會爲此建立一個案例。不幸的是,我不知道你會怎麼做。 – 2014-10-01 23:44:29

+0

我會說明這個想法 - 你有一個自上而下的駕駛遊戲或射擊遊戲或遊戲池遊戲,你需要旋轉設備以進行控制或排隊等等。 遊戲仍然鎖定在手機方向,但用戶界面(分數,積分,生命,乘數或其他)將旋轉,以便它保持可讀 - 例如,你的分數仍然是最高的,生命是左下等等。 這就是我想要做的事情(好吧 - 我實際上正在做,但沒有Stage/Group/Actors atm) – shrewdlogarithm 2014-10-02 01:30:15

回答

2

我想我已經通過回退一點點,看看Stage/Actor系統如何工作來解決這個問題。

旋轉和轉換整個舞臺的想法充滿了複雜性 - 我可以在SpriteBatch級別做到這一點,這是一種分心,導致了很多浪費時間 - 令人遺憾的是。

只有當我意識到,當我計算所有我的UI(Actor)元素相對於屏幕中心或角落的位置時,我不妨採取進一步的旋轉和轉換它們的步驟同時!我也意識到,將它們分組,使得這非常簡單(事實上,我可以簡單地通過使用2個獨立的組來靜態和旋轉元素!)

旋轉/移動演員當然會調整它的邊界框/觸摸區域所以我現在有一個適當的Stage/Group/Actor模型,它隨着設備的旋轉而旋轉 - 我可能只是靜態信息(分數),甚至是一個動態菜單或者一個遊戲池中的'cue'的覆蓋圖,或者無論什麼...

正如愛迪生會說 - 我沒有浪費2天,我只花了2天想出了大量的想法,我現在知道不工作!