私は何時間も壁に頭を打ちました。私はCIFilterを使ってアプリケーション内のテクスチャを修正し、その新しいテクスチャを新しいSKTileDefinitionの一部として使用してマップ上のタイルを再描画しようとしています。 関数bellowは、プレーヤーが所有するタイルを見つけ、SKTileDefinitionをcoloredDefinition
に変更することによってそれらを再描画しようとします。プログラマチックにSKTileDefinitionを作成する
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を適用する関数です:colorizeTile
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を変更することはできません理由を考え出すで任意のヘルプを大好きです。新しいTileDefinitionを定義してそれをtileGroupに追加し、次にそのタイルグループを特定のタイル定義に設定することが直感的に正しいと思われます。しかし、これは空白のタイルにつながっています...
すべてのポインタ?