0

我问这个问题是因为我没有找到任何解决此类问题的方法。事实上,十六进制地图支持并不是很流行。

我正在使用 SpriteKit 框架制作游戏。我将 SktileMapNode 与六边形地图一起使用,其中包含 1 组 4 组图块。

playernode 在每个图块上移动,我不希望当他在特定图块上移动时可以触发某些事件(打印,函数,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")


        }


    }

只有“不同的瓦片”输出被触发。

欢迎任何帮助。

图片示例链接:我想要的东西

4

1 回答 1

0

我认为您想在其他操作完成后运行您的完成块?您可以按顺序执行此操作。

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的图形和寻路功能。

于 2017-05-31T22:35:28.937 回答