Xcode - Swift SpriteKit: SKTileMapNode с физическим пробелом

Я играю со SpriteKit и TileMapNode, и у меня возникла досадная проблема.

Вот как это должно выглядеть. введите здесь описание изображения

Вот как это на самом деле выглядит в симуляторе / устройстве.

введите здесь описание изображения

Белые пространства ужасны, и я понятия не имею, как от них избавиться. Мои плитки имеют размер около 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)
                }
            }
        }

person Pascal Friedrich    schedule 02.02.2017    source источник
comment
где загружается ваша сцена (обычно из viewController). установите для showPhysics значение true. Он должен показать вам, где ваши выравнивания не совпадают.   -  person Goodtime    schedule 18.04.2017


Ответы (1)


tileNode.strokeColor = .clear

решил проблему

Обновление: проблема не решена ... просто перемещено: /

При проверке, контактируют ли земля и игрок, на каждой новой плитке статус переключается между «контакт» и «нет контакта». При использовании куба вместо круга куб начинает вращаться. Кажется, что угол куба застрял на минимальном пространстве между плитками.

person Pascal Friedrich    schedule 02.02.2017