2014-01-21 97 views
1

我正在Unity3d(c#)中使用箭頭鍵和2個操作按鈕控制字符的2D遊戲。如何正確擴展字符的類

我的問題很簡單,我可以解決它,但解決方案對我來說似乎有點骯髒。我用一個很簡單的狀態機,主人公是在水平或垂直方式移動(地面和梯)

我延長目前的狀態是:

HeroState - > HeroStateStatic - > HeroStateMovement

然後我伸出靜態或移動到最終狀態:

HeroStateMovement - > HeroStateRunning或HeroStateStatic - > HeroSta teLookUp

但是我始終在呼喚它決定下一步該怎麼做了巨大的外部函數(在英雄級),然後切換狀態

我相信我應該有國家本身這個道理,但在規定階梯有不同的檢查和可能的選擇,然後陳述在地板上,我不知道如何修改這些類,使所有必要的代碼只寫一個(這就是爲什麼現在是在英雄,而不是在州)...是在那裏什麼像交叉延伸技術?

(我知道如何使用抽象類和接口,但它可能並沒有解決我的麻煩)

感謝您的幫助

回答

0

你的問題真的可以用狀態機來解決,但是既然你有一個龐大的班級決定要做什麼,似乎你在實施state pattern時遇到了麻煩。

blog post有關於在Unity應用程序中實現狀態模式的很好的解釋,你可以很容易地谷歌獲得更多的資源。

一旦我想創建一個使用方法作爲狀態的簡單狀態機,只是爲了方便(因爲模式使用類作爲狀態)。人們可以使用這種方式來讓狀態機處於狀態(這也可以通過常規狀態模式來實現),所以如果你想知道這個,你可以閱讀my stack overflow question

+0

thx回答 - 巨大的決策方法是巨大的,因爲它被所有州共享,我的問題是,許多州共享這個決定解決 - 例如,WalkState RunState和JumpState有幾乎相同的決策解決方案 - d需要的是多重繼承,這在c#中不起作用,我正在c#中尋找其他解決方案。 – arximedes

+0

我不完全理解。你說這個方法很大,因爲它解決了很多狀態。因此,這不是一個普通的決定,因爲它必須解決許多國家的特點。爲什麼不是有一個巨大的方法,你不能在每個國家內的一個較小的決策方法?如果這三個狀態具有幾乎相同的解決方法,它可以從一個基類繼承,那麼爲什麼你需要多重繼承? – Roberto

+0

sry我的英語不是很原生的:D它解決了許多州的決定,例如:跑步或步行運動後,它會詢問英雄是否想跑步或步行或跳躍或停留或轉身,但如果你在房間的盡頭它知道你不能前進,所以你只能轉彎,有一些狀態將你從樓梯移動到梯子,然後它會詢問你可以在梯子上做什麼,我有2個決定功能DecideFloor,DecideLadder,但是你可以在諸如LookUp,LookDown狀態之類的場景中,你可以通過運行例如 – arximedes