0

我正在玩 SpriteKit 和 TileMapNode,但我遇到了一个烦人的问题。

这就是它应该的样子。 在此处输入图像描述

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

在此处输入图像描述

白色空间很糟糕,我不知道如何摆脱它们。我的瓷砖在资产的“Sprite Atlas - 部分”中约为 70x70,我已将我的 tilemapnode 配置为 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)
                }
            }
        }
4

1 回答 1

0
tileNode.strokeColor = .clear

解决了问题

更新:问题没有解决......刚刚移动:/

检查时,如果地面和玩家接触,每个新瓷砖的状态都会在“接触”和“不接触”之间切换。当使用立方体而不是圆形时,立方体开始旋转。看起来,立方体的角落卡在瓷砖之间的最小空间中。

于 2017-02-02T09:02:17.100 回答