我在玩SpriteKit和TileMapNode,我有一个恼人的问题。
这就是它应该是什么样子。

这就是它在模拟器/设备中的实际外观。

空白是可怕的,我不知道如何摆脱它们。在资源的"Sprite Atlas - Part“中,我的磁贴大约是70x70,我已经将我的磁贴节点配置为0.5的比例和70x70的磁贴大小。
在测试一些案例时,我发现这部分代码触发了错误,但我不知道哪里会出错。将SKPhysicsBody大小更改为较小的大小没有任何帮助。
guard let tilemap = childNode(withName: "LevelGround") as? SKTileMapNode else { return }
let tileSize = tilemap.tileSize
let halfWidth = CGFloat(tilemap.numberOfColumns) / 2.0 * tileSize.width
let halfHeight = CGFloat(tilemap.numberOfRows) / 2.0 * tileSize.height
for row in 0..<tilemap.numberOfRows {
for col in 0..<tilemap.numberOfColumns {
if tilemap.tileDefinition(atColumn: col, row: row) != nil {
let x = CGFloat(col) * tileSize.width - halfWidth
let y = CGFloat(row) * tileSize.height - halfHeight
let rect = CGRect(x: 0, y: 0, width: tileSize.width, height: tileSize.height)
let tileNode = SKShapeNode(rect: rect)
tileNode.position = CGPoint(x: x, y: y)
tileNode.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 70, height: 70), center: CGPoint(x: tileSize.width / 2.0, y: tileSize.height / 2.0))
tileNode.physicsBody?.isDynamic = false
tileNode.physicsBody?.collisionBitMask = 2
tileNode.physicsBody?.categoryBitMask = 1
tileNode.physicsBody?.contactTestBitMask = 2 | 1
tileNode.name = "Ground"
tilemap.addChild(tileNode)
}
}
}发布于 2017-02-02 17:02:17
tileNode.strokeColor = .clear解决了问题
更新:问题未解决...刚移动:/
当检查时,如果地面和玩家处于接触状态,每个新的瓷砖状态都在“接触”和“无接触”之间切换。当使用立方体而不是圆时,立方体开始旋转。看起来,立方体的角被卡在了瓷砖之间的最小空间上。
https://stackoverflow.com/questions/41996383
复制相似问题