저는 몇 시간 동안 벽에 머리를 때려 왔습니다. CIFilter를 사용하여 응용 프로그램 내부의 텍스처를 수정하고 새 텍스처를 새 SKTileDefinition의 일부로 사용하여 맵에서 타일을 다시 칠하려고합니다. 벨로우 기능은 플레이어가 소유 한 타일을 찾아 SKTileDefinition을 coloredDefinition
으로 변경하여 타일을 다시 채 웁니다. colorizeTile
프로그래밍 방식으로 SKTileDefinition 만들기
func colorizeTile(tile: SKTileDefinition, into color: UIColor) -> SKTileDefinition{
let texture = tile.textures[0]
let colorationFilter = CIFilter(name: "CIColorMonochrome")
colorationFilter!.setValue(CIImage(cgImage: texture.cgImage()), forKey: kCIInputImageKey)
colorationFilter!.setValue(CIColor(cgColor: color.cgColor), forKey: "inputColor")
colorationFilter!.setValue(0.25, forKey: "inputIntensity")
let coloredTexture = texture.applying(colorationFilter!)
let newDefinition = SKTileDefinition(texture: texture)
newDefinition.textures[0] = coloredTexture
newDefinition.name = "meow"
return newDefinition
}
나는 내가 할 노력하고 있어요처럼 나는 tileDefinition을 변경할 수없는 이유를 알아내는 어떤 도움을 사랑하는 것 : 여기
func updateMapTileColoration(for players: Array<Player>){
for player in players {
for row in 0..<mainBoardMap!.numberOfRows {
for col in 0..<mainBoardMap!.numberOfColumns {
let rowReal = mainBoardMap!.numberOfRows - 1 - row
if player.crownLocations!.contains(CGPoint(x: row, y: col)) {
if let tile = mainBoardMap!.tileDefinition(atColumn: col, row: rowReal) {
let coloredDefinition = colorizeTile(tile: tile, into: player.color!)
print(coloredDefinition.name)
mainBoardMap!.tileSet.tileGroups[4].rules[0].tileDefinitions.append(coloredDefinition)
mainBoardMap!.setTileGroup(crownGroup!, andTileDefinition: crownGroup!.rules[0].tileDefinitions[1], forColumn: col, row: rowReal)
}
}
}
}
}
그리고
는 actulaly CIFilter을 적용하는 기능입니다. 새로운 TileDefinition을 정의하여 tileGroup에 추가 한 다음 타일 그룹을 특정 타일 정의로 설정할 수 있다는 것이 직관적으로 정확합니다. 그러나 이것은 빈 타일로 이어지고 있습니다 ...모든 포인터?