2017-04-13 69 views
1

我正在玩瓷砖编辑器,我用它创建了一个如下所示的简单,有点大的地图。瓷砖尺寸为64×64,地图大小为58×32从当前位置移动SKNode一块瓷砖

enter image description here

而且我想知道游戏角色的当前位置。让我称它为播放器(如SKNode)。我想知道这个人的当前位置,以便我可以了解它的任何一个相邻瓷砖是不是一个障碍。以下几行代码给我(7,-3)。

background = self.childNode(withName: "World") as! SKTileMapNode 
let position = background.convert(player.position, from: player) 
let column = background.tileColumnIndex(fromPosition: position) 
let row = background.tileRowIndex(fromPosition: position) 
print(column, row) 

,这表明这些坐标指向相机的中心,用红色圆圈表示。以下给我(10,2)。

let position = background.convert(player.position, from: self) 
let column = background.tileColumnIndex(fromPosition: position) 
let row = background.tileRowIndex(fromPosition: position) 

这是从左下角开始的位置。现在

,如果我想用1瓦,写入到移动游戏角色了......

let position = background.convert(player.position, from: player) 
let column = background.tileColumnIndex(fromPosition: position) 
let row = background.tileRowIndex(fromPosition: position) 
let destination = background.centerOfTile(atColumn: column, row: row + 1) 
let action = SKAction.move(to: destination, duration: 1) 
player.run(action) 

,游戏角色会失踪,被从地图的脸上消失。那么我怎样才能将节点移动一个tile?

回答

0

也许试试这个:

let currentPlayerPosition = background.convert(player.position, from: player) 
    let column = background.tileColumnIndex(fromPosition: currentPlayerPosition) 
    let row = background.tileRowIndex(fromPosition: currentPlayerPosition) 
    let destination = background.centerOfTile(atColumn: column, row: row + 1) 

    // the new line I added 
    let newPlayerPosition = background.convert(destination, to: player) 

    let action = SKAction.move(to: newPlayerPosition, duration: 1) 
    player.run(action) 
+0

号节点会从地图上消失。 –

+0

也许一个简单的建议,但试着打印玩家当前和期望位置的实际CGPoints。如果玩家刚刚离开地图,那么想到的最简单的想法就是CGPoint也不在地图上。 – JohnV