SKTileMap не отображает плитки - PullRequest
0 голосов
/ 19 февраля 2020

Я создаю эту простую платформерную игру, используя SpriteKit в Swift Playgrounds в качестве небольшого проекта.

Однако, когда я создал SKTileSet, TileMap и т. Д. c. и побежал на игровую площадку, ни одна из плиток на самом деле не обнаружилась.

Другие SKSpriteNodes, которые я создал также в том же файле сцены SpriteKit, отображаются отлично.

Код:

GameScene.swift

class GameScene: SKScene {

    var worldLayer: Layer!
    var backgroundLayer: RepeatingLayer!
    var mapNode: SKNode!
    var tileMap: SKTileMapNode!

    var lastTime: TimeInterval = 0
    var dt: TimeInterval = 0

    override func didMove(to view: SKView) {
        createLayers()
    }

    func createLayers() {
        worldLayer = Layer()
        worldLayer.zPosition = 2
        addChild(worldLayer)
        worldLayer.layerVelocity = CGPoint(x: -200.0, y: 0.0)

        backgroundLayer = RepeatingLayer()
        backgroundLayer.zPosition = 0
        addChild(backgroundLayer)

        for i in 0...1 {
            let backgroundImage = SKSpriteNode(imageNamed: "Background")
            backgroundImage.name = String(i)
            backgroundImage.scale(to: frame.size, width: false, multiplier: 1.0)
            backgroundImage.anchorPoint = CGPoint.zero
            backgroundImage.position = CGPoint(x: 0.0 + CGFloat(i) * backgroundImage.size.width, y: 0.0)
            backgroundLayer.addChild(backgroundImage)
        }

        backgroundLayer.layerVelocity = CGPoint(x: -100.0, y: 0.0)

        load(level: "Level_0-1")
    }

    func load(level: String) {
        if let levelNode = SKNode.unarchiveFromFile(file: level) {
            mapNode = levelNode
            worldLayer.addChild(mapNode)
            loadTileMap()
        }
    }

    func loadTileMap() {
        if let groundTiles = mapNode.childNode(withName: "GroundNode") as? SKTileMapNode {
            tileMap = groundTiles
            tileMap.scale(to: frame.size, width: false, multiplier: 1.0) 
            PhysicsHelper.addPhysicsBody(to: tileMap, and: "ground")
            for child in groundTiles.children {
                if let sprite = child as? SKSpriteNode, sprite.name != nil {
                    ObjectHelper.handleChild(sprite: sprite, with: sprite.name!)
                }
            }

        }
    }
}

Как я могу решить эту проблему?

Это связано с тем, что я использую Swift Playgrounds вместо того, чтобы быть проектом?

Я подтвердил, что нет орфографических ошибок и что все работает, то есть на самом деле есть плитки как узлы на заднем плане, но ни одна из них не отображается.

Я имею в виду, что при удалении плиток экран будет содержать только 31 узел.

Но когда я добавлю TileMap и плитки, экран будет содержать 162 узла, но плитки просто не появляются.

Спасибо за помощь, я действительно борюсь с этим.

1 Ответ

0 голосов
/ 23 февраля 2020

У меня были похожие проблемы на игровой площадке, и кажется, что TileMap имеет конфликт. Поместите свой код в проект xcode и посмотрите, работает ли он

...