새로운 타일 맵 노드가있는 타일 맵을 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에 개별적으로 액세스하는 방법이 있습니까?
미리 감사드립니다.
실망입니다. tileset 타이머의 기본 데이터를 보유하고 참조 용으로 사용할 별도의 2 차원 배열을 설정합니다. 타일이 삭제 될 때 여러 레이어를 설정하는 아이디어 일 수도 있습니다. 제안 된대로 무너지는 효과를 보여줍니다. 감사합니다 :) J – JohnnieMac
@ JohnnieMac 도움이된다면 대답을 수락 할 수 있습니다! –
floorTimers = Array (반복 : 배열 (repeatElement (0.0, 개수 : roomMap.numberOfRows)), 개수 : roomMap.numberOfColumns) 0 열의 ... roomMap.numberOfColumns - 1 { 0의 행 ... roomMap .numberOfRows - 1 { let timer = objectTile? .userData? .value (forKey : "timer")를 다음과 같이하면 objectTile = roomMap.tileDefinition (atColumn : column, row : row) 하자. Double { } floorTimers [열] = 타이머 } } ("[행] [열] = \ (열), \ (행) – JohnnieMac