Карта Spritekit Hexagonal: обнаружение плитки в конце SKAction.

Я задаю этот вопрос, потому что я не нашел решения для такого рода проблем. На самом деле поддержка Hex-карт не очень популярна.

Я делаю игру с помощью SpriteKit Framework. Я использую SktileMapNode с шестиугольной картой с 1 набором плиток из 4 групп.

Узел игрока перемещается по каждой плитке, чего я не хочу, так это то, что когда он перемещается по определенной плитке, может быть запущено какое-то событие (печать, функция, Sktransition), но на данный момент я застрял на простом обнаружении этих плиток.

Я устанавливаю пользовательские данные (как bool) и применяю их в коде, но ничего не происходит, даже с событием касания на плитке.

    extension GameScene  {



func move(theXAmount:CGFloat , theYAmount:CGFloat, theAnimation:String )  {


    let wait:SKAction = SKAction.wait(forDuration: 0.05)

    let walkAnimation:SKAction = SKAction(named: theAnimation, duration: moveSpeed )!

    let moveAction:SKAction = SKAction.moveBy(x: theXAmount, y: theYAmount, duration: moveSpeed )

    let group:SKAction = SKAction.group( [ walkAnimation, moveAction ] )

    let finish:SKAction = SKAction.run {



        let position = self.thePlayer.position

        let column = self.galaxieMapnode.tileColumnIndex(fromPosition: position)
        let row = self.galaxieMapnode.tileRowIndex(fromPosition: position)


        if let tile:SKTileDefinition = self.galaxieMapnode.tileDefinition(atColumn: column, row: row) {


            if  let tileBoolData = tile.userData?["wormholeTile"] as? Bool {

                if (tileBoolData == true) {

                    print("Wormhole touched")


                }



            }




        } else {


            print("different tile")


        }


    }

Запускается только вывод «другая плитка».

Любая помощь приветствуется.

Ссылка на пример изображения: то, что я хочу


person Rahma Sinien    schedule 31.05.2017    source источник


Ответы (1)


Я думаю, вы хотите запустить свой финишный блок после завершения других действий? Вы можете сделать это в виде последовательности.

var sequence = [SKAction]()
let action = SKAction.move(to: location, duration: 1)
let completionHandler = SKAction.run({
    // Check tile info here
})

sequence += [action, completionHandler]

self.player.run(SKAction.sequence(sequence))

Обычно на шестиугольной карте вы перемещаете игрока на соседний тайл и проверяете атрибуты тайлов, а затем продолжаете следующее действие перемещения. Для этого требуются функции графа и поиска пути из GameplayKit.

person Mark Brownsword    schedule 31.05.2017
comment
Я написал несколько статей и примеры проектов о шестиугольных тайловых картах в SpriteKit. - person Mark Brownsword; 01.06.2017
comment
Спасибо, Марк, я смотрю на этот Gameplaykit. Спасибо за советы. Могу я вернуться к вам с другим вопросом? - person Rahma Sinien; 01.06.2017
comment
Извините, редактирование: я возвращаюсь, кажется, мне нужно реализовать много вещей, чтобы сделать график и функциональность поиска пути, и, кажется, мне нужно перестроить многое во многих файлах, которые у меня есть. Набор GamePlay - единственный способ сделать то, что я хочу сделать? - person Rahma Sinien; 01.06.2017
comment
Этот пример может быть полезен для ты. Он использует позицию игроков для поиска объектов. - person Mark Brownsword; 01.06.2017