ゲーム内のタイルの状態を追跡するために 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 に設定すると、その変数を使用して状態に入ることができなくなります...
// 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')