создание SKTileMap программно для создания 2D-карты 3D-сцены SceneKit - PullRequest
0 голосов
/ 15 мая 2019

Я делаю трехмерную пошаговую игру для Mac OS с использованием Swift.У меня уже есть 3D часть подземелья - она ​​случайным образом генерирует подземелье и сохраняет каждый квадрат подземелья в виде строки в массивах (например, мошенник использует текстовые символы для представления стен и т. Д.)

Я хочуСоздание 2D-карты подземелья с использованием SpriteKit и SKTileMap кажется логичным способом сделать это, но у меня возникли проблемы с кодом.

в качестве учебного упражнения я создал новый проект и заполнил окно Customпросмотр, который я выбрал для использования класса SKView и попытался сделать карту плитки шахматной доски программно, но я просто отображаю один цвет.

вот код

@IBOutlet var spriteView: SKView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.


        let scene = SKScene()

        let greenTexture = SKTexture(imageNamed: "green")
        let greenDefinition = SKTileDefinition(texture: greenTexture)
        let greenGroup = SKTileGroup(tileDefinition: greenDefinition)

        let redTexture = SKTexture(imageNamed: "red")
        let redDefinition = SKTileDefinition(texture: redTexture)
        let redGroup = SKTileGroup(tileDefinition: redDefinition)


        let tileSet = SKTileSet(tileGroups: [greenGroup, redGroup], tileSetType: .grid)
        let backgroundGroup = redGroup
        let tileMap = SKTileMapNode(tileSet: tileSet, columns: 5, rows: 5, tileSize: CGSize(width: 10, height: 10), fillWith: backgroundGroup)


        tileMap.setTileGroup(greenGroup, forColumn: 0, row: 0)
        tileMap.setTileGroup(greenGroup, forColumn: 0, row: 2)
        tileMap.setTileGroup(greenGroup, forColumn: 0, row: 4)

        tileMap.setTileGroup(greenGroup, forColumn: 1, row: 0)
        tileMap.setTileGroup(greenGroup, forColumn: 1, row: 2)
        tileMap.setTileGroup(greenGroup, forColumn: 1, row: 4)

        tileMap.setTileGroup(greenGroup, forColumn: 2, row: 0)
        tileMap.setTileGroup(greenGroup, forColumn: 2, row: 2)
        tileMap.setTileGroup(greenGroup, forColumn: 2, row: 4)

        tileMap.setTileGroup(greenGroup, forColumn: 3, row: 0)
        tileMap.setTileGroup(greenGroup, forColumn: 3, row: 2)
        tileMap.setTileGroup(greenGroup, forColumn: 3, row: 4)

        tileMap.setTileGroup(greenGroup, forColumn: 4, row: 0)
        tileMap.setTileGroup(greenGroup, forColumn: 4, row: 2)
        tileMap.setTileGroup(greenGroup, forColumn: 4, row: 4)

        tileMap.setTileGroup(greenGroup, forColumn: 5, row: 0)
        tileMap.setTileGroup(greenGroup, forColumn: 5, row: 2)
        tileMap.setTileGroup(greenGroup, forColumn: 5, row: 4)


        scene.addChild(tileMap)
        spriteView.presentScene(scene)

    }

без

tileMap.setTileGroup(greenGroup, forColumn: 0, row: 0)

вся карта красная, но с ней вся карта зеленая.

что нужно изменить, чтобы она стала красно-зеленой шахматной доской, подобной карте тайлов?

...