Spritekit Hexagonal map: 结束 SKAction 中的瓦片检测。
Spritekit Hexagonal map: tile detection in end SKAction.
我问这个问题是因为我没有找到解决此类问题的方法。事实上 Hex map 支持不是很流行。
我正在使用 SpriteKit 框架制作游戏。我将 SktileMapNode 与六角形地图一起使用,其中包含 1 组 4 组图块。
玩家节点在每个方块上移动,我不希望他在特定方块上移动时可以触发某些事件(打印、函数、Sktransition),但目前我只停留在检测这些方块上.
我设置了用户数据(作为布尔值)并将它们应用到代码中,但没有任何反应,即使在图块上有触摸事件也是如此。
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")
}
}
仅触发 "different tile " 输出。
欢迎任何帮助。
Link 图片示例:the thing I want
我想你想 运行 在其他操作完成后结束你的块?您可以按顺序执行此操作。
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.
的图形和寻路功能
我问这个问题是因为我没有找到解决此类问题的方法。事实上 Hex map 支持不是很流行。
我正在使用 SpriteKit 框架制作游戏。我将 SktileMapNode 与六角形地图一起使用,其中包含 1 组 4 组图块。
玩家节点在每个方块上移动,我不希望他在特定方块上移动时可以触发某些事件(打印、函数、Sktransition),但目前我只停留在检测这些方块上.
我设置了用户数据(作为布尔值)并将它们应用到代码中,但没有任何反应,即使在图块上有触摸事件也是如此。
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")
}
}
仅触发 "different tile " 输出。
欢迎任何帮助。
Link 图片示例:the thing I want
我想你想 运行 在其他操作完成后结束你的块?您可以按顺序执行此操作。
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.
的图形和寻路功能