私は、新しいタイルマップノードをiOS 10で利用できるタイルマップを作成すると考えました。SpriteKit - すべてのタイルのTileDefinitionとuserDataを更新していますか?
タイルを立てれば、それは崩壊します。ですから、私はtileGroup定義にtimerというuserDataフィールドを配置します。代わりに、私はどちらか一つのタイマーを調整したり、同時にそのタイルごとにタイマーを調整していますように見える設定それ自身のタイマーを持つ各タイルの
func crumbleTile(pos :CGPoint, dt : TimeInterval){
let column = roomMap.tileColumnIndex(fromPosition: pos)
let row = roomMap.tileRowIndex(fromPosition: pos)
let objectTile = roomMap.tileDefinition(atColumn: column , row: row)
if var timer = objectTile?.userData?.value(forKey: "timer") as? Double {
print("tile pos \(column),\(row)")
print("timer-from tile:\(timer)")
timer = timer - dt
objectTile?.userData?.setValue(timer, forKey: "timer")
print("timer-update tile:\(timer)")
if timer < 0.0 {
//move to next frame
if var crumbleFrame = objectTile?.userData?.value(forKey: "crumble") as? Int {
crumbleFrame = crumbleFrame - 1
print("crumble:\(crumbleFrame)")
objectTile?.userData?.setValue(crumbleFrame, forKey: "crumble")
if crumbleFrame < 1 {
//delete tile
print("delete tile")
removeTile(pos: pos)
} else {
//move to next frame
print("next frame")
if crumbleFrame == 2 {
print("change frame 2")
}
if crumbleFrame == 1 {
print("change frame 1")
}
if crumbleFrame == 0 {
print("change frame 0")
}
}
}
}
}
}
func removeTile(pos : CGPoint) {
let column = roomMap.tileColumnIndex(fromPosition: pos)
let row = roomMap.tileRowIndex(fromPosition: pos)
roomMap.setTileGroup(nil, forColumn: column, row: row)
}
。
ログファイルに表示されます。
tile pos 51,11
timer-from tile:-0.104295339999993
timer-update tile:-0.125737270999991
crumble:-1
delete tile
2:crumble floor right
tile pos 52,11
timer-from tile:-0.125737270999991
timer-update tile:-0.164520885999991
crumble:-2
delete tile
位置52,11のタイルは52,11と同じタイマー値を持っていますか?
質問には、個々のタイルuserDataに個別にアクセスする方法がありますか?
ありがとうございました。
これは残念です。私はタイルセットタイマーからのデフォルトデータを保持する別の2次元配列をセットアップし、それを参照用に使用します。タイルが削除されたときに、複数のレイヤーを設定することも考えられます。ありがとう:) J – JohnnieMac
@ JohnnieMacあなたが答えを受け入れることができれば、それは役に立ちます! –
floorTimers = Array(繰り返し:Array(repeatElement(0.0、count:roomMap.numberOfRows))、カウント:roomMap.numberOfColumns)0の列の ... roomMap.numberOfColumns - 1 { 0の行... roomMap .numberOfRows - 1 { let timer = roomMap.tileDefinition(atColumn:column、row:row) let timer = objectTile?.userData?.value(forKey: "timer")には? Double { } floorTimers [列] [タイマー] } }}({[行] [列] = \(列)、\(行) – JohnnieMac