我正在使用GKStateMachine來跟蹤我遊戲中瓷磚的狀態。如何以GKStateMachine再次輸入以前的狀態?
當我放置一個項目時,項目所覆蓋的圖塊將被置於「已計劃」狀態。我如何存儲,然後在以後的時間將圖塊返回到之前的狀態?
下面是代碼的部分我圖是相關的我的問題。樂於分享更多具體請求。
//...
// Have previously entered the tiles stored in the global Game object into a state which is not "planned" state
class func movePlannedObject(x: Int, y: Int) {
//DO Some things
for tile in Game.sharedInstance.plannedBuildingTiles {
tile.stateMachine.enterState(tile.previousState!)
}
// Set new position and change state of tiles to planned
}
//...
而且狀態機:
class TileState : GKState{
var tile : Tile?
init(tile: Tile) {
super.init()
self.tile = tile
}
}
class TileTileState: TileState {
}
class TileGrassState: TileState {
}
class TilePathState: TileState {
}
class TilePlanState: TileState {
override func didEnterWithPreviousState(previousState: GKState?) {
super.didEnterWithPreviousState(previousState)
tile?.previousState = // What?
print(tile?.previousState)
Game.sharedInstance.plannedBuildingTiles.append(tile!)
}
}
要點:https://gist.github.com/Relequestual/dac6d51c923e5ce4224e
如果我設置previousState到previousState,我不能再使用vairable進入狀態......
// In the tile class
var previousState: GKState?
// In states function didEnterWithPreviousState
tile?.previousState = previousState
// Elsewhere
tile.stateMachine.enterState(tile.previousState!)
編譯時間錯誤:
Cannot convert value of type 'GKState' to expected argument type 'AnyClass' (aka 'AnyObject.Type')
#swift-lang上的一些民謠幫助我解決了這個問題。我希望下週能夠發佈解決方案。 – Relequestual
你是怎麼解決這個問題的? – mfessenden
@mfessenden對不起,我是「那個人」誰沒有發佈他們的解決方案。這裏是詳細的版本:https://gist.github.com/Relequestual/548c0f858f04e2d2a07550a1e6125afe - 事實證明我並沒有真的想這樣做,但我挖出了我的git歷史中的代碼=]讓我知道如果我可以進一步幫助。 – Relequestual