2013-03-14 117 views
1

我重新組裝我的遊戲,我爲android寫。它是用簡單的畫布書寫來學習基礎知識。爲了達到更高的水平,我將在libgdx的幫助下編寫它。 爲此,我想到了一個stage,我在那裏添加了我的Actors(怪物,技能如果他們是活躍的,性格和可能的粒子)。我讀到,這是一個合併2D遊戲的好方法。線程在libgdx和一般問題移動精靈

關於它的更多信息。這是一個基於方形系統的2D RPG。每一步移動到下一個方塊(也許後面是平鋪,此時背景是單張圖片)

在舊版本中,我爲每個怪物使用線程,以便他們能夠處理並作出反應,因爲他們「希望」。這也可能在libgdx中,或者我需要以不同的方式處理它?

如果我想將字符從一個方塊移動到下一個方塊,我有一個計算時間,我通過改變它的像素位置將精靈從一個方塊移動到下一個方塊。在libgdx中,我將使用一個帶有正方形的攝像頭。例如(40f,30f)。像我在老遊戲中一樣,它是否可以在thread內移動角色?所以我知道它從一個方塊到下一個方塊需要500ms,所以每50ms ppuX需要+ 0.1f。我也根據這個更新了精靈。所以如果它移動得更快,精靈變得更快。

我也以這種方式編程技能。例如,火球就是一個被線程移動直到碰到某個東西的圖片。

查看「原型」的圖片。 Picture of the prototype with canvas

回答

3

這也可能是可能的,但分配每個實體一個線程是一個非常糟糕的主意 - 如此糟糕,事實上,它有一個相應的TheDailyWTF項:

http://thedailywtf.com/Articles/Sprite_Threading.aspx

你不僅是消耗不必要的資源在這種方法中,長遠來說,你也會危及你的理智。我相信鏈接條目連同評論,詳盡闡述了爲什麼是這種情況。

通常,libgdx通過ApplicationListener類(特別是render()方法)支持「主循環」模型。 There is a number of tutorials爲您開始,including one for Android

我知道這個方法起初看起來更有限制,但它允許更可靠的代碼。

+0

我知道那個教程,但我想知道如何讓我的怪物計算下一步,如果他們做了第一步。如果他的舉動完成,我可以簡單地在渲染中運行微積分嗎?所以我總是檢查一個布爾值「已移動的」,如果他在下一個塊,那麼它會被設置。如果移動,我確實計算下一步? 'stage.act()'中那個線程中的所有東西? – BennX 2013-03-14 11:08:33

+1

我不確定我是否理解你(如果沒有,請重新解釋答案),但我認爲你的問題是關於如何讓你的怪物(實體)「知道」他們應該移動。那麼,因爲你將在一個線程中運行,你不必有'moveDone'標誌 - 一個怪物已經移動或者不移動,沒有中間狀態。你可以例如在'render'方法中將所有怪物移動到一個塊中,然後執行其他邏輯。這回答了你的問題了嗎? – 2013-03-14 11:20:14

+0

或多或少。我得到了一個方形系統,並且總是希望他們計算下一步的移動。所以如果他們在廣場(移動完成),我想計算最好的下一個廣場去。這甚至在稍後使用良好的KI算法。 – BennX 2013-03-14 11:23:50

1

在LibGdx中,Game類的渲染()方法將連續調用。在這種方法中,你可以做4件事。

1)過程輸入
2)更新精靈/演員
3)檢查碰撞
4)使世界

你並不需要創建一個單獨的線程用於移動遊戲對象。