SKSpriteNodes не отображаются должным образом

avatar
Max Kortge
8 апреля 2018 в 07:50
52
0
0

Я пытаюсь сделать игру типа "Взломай замок" для развлечения и практики, но мои SKSpriteNodes вообще не появляются. Мой GameScene.swift ниже, как и мой GameViewController.swift. Я просмотрел проекты других людей, использующих Sprite Kit, и все они работают нормально, но их код в моем тоже не работает.


enter image description here

enter image description here

enter image description here


   import UIKit
import SpriteKit
import GameplayKit

class GameViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        if let view = self.view as! SKView? {
            if let scene = SKScene(fileNamed: "GameScene") {
                scene.scaleMode = .aspectFill

                view.presentScene(scene)
            }

            view.ignoresSiblingOrder = true

            view.showsFPS = true
            view.showsNodeCount = true
        }
    }

    override var shouldAutorotate: Bool {
        return true
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        if UIDevice.current.userInterfaceIdiom == .phone {
            return .allButUpsideDown
        } else {
            return .all
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override var prefersStatusBarHidden: Bool {
        return true
    }
}

    import SpriteKit
import GameplayKit

class GameScene: SKScene {

    var circle = SKSpriteNode()
    var tapper = SKSpriteNode()

    var tapperPath = UIBezierPath()

    var gameStarted = Bool()

    var movingClockwise = Bool()

    override func didMove(to view: SKView) {

        circle = SKSpriteNode(imageNamed: "Circle")
        circle.size = CGSize(width: 300, height: 300)
        circle.position = CGPoint(x: UIScreen.main.bounds.width/2, y: UIScreen.main.bounds.height/2)
        self.addChild(circle)

        tapper = SKSpriteNode(imageNamed: "Tapper")
        tapper.size = CGSize(width: 40, height: 7)
        tapper.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2 + 120)
        tapper.zRotation = 3.14 / 2
        self.addChild(tapper)

    }

    override func touchesBegan(_ touches: Set<UITouch>  with event: UIEvent?) {

        if gameStarted {
            if movingClockwise {
                moveCounterClockWise()
                movingClockwise = false
            } else {
                moveClockWise()
                movingClockwise = true
            }
        } else {
            moveClockWise()
            movingClockwise = true
            gameStarted = true
        }
    }


    func moveClockWise() {

        let dx = tapper.position.x - self.frame.width / 2
        let dy = tapper.position.y - self.frame.height / 2

        let rad = atan2(dy, dx)

        tapperPath = UIBezierPath(arcCenter: CGPoint(x: self.frame.width / 2, y: self.frame.height / 2), radius: 120, startAngle: rad, endAngle: rad + (CGFloat.pi * 4), clockwise: true)
        let follow = SKAction.follow(tapperPath.cgPath, asOffset: false, orientToPath: true, speed: 200)
        tapper.run(SKAction.repeatForever(follow).reversed())

    }

    func moveCounterClockWise() {

        let dx = tapper.position.x - self.frame.width / 2
        let dy = tapper.position.y - self.frame.height / 2

        let rad = atan2(dy, dx)

        tapperPath = UIBezierPath(arcCenter: CGPoint(x: self.frame.width / 2, y: self.frame.height / 2), radius: 120, startAngle: rad, endAngle: rad + (CGFloat.pi * 4), clockwise: true)
        let follow = SKAction.follow(tapperPath.cgPath, asOffset: false, orientToPath: true, speed: 200)
        tapper.run(SKAction.repeatForever(follow))

    }


    override func update(_ currentTime: TimeInterval) {

    }
}

Редактировать

Файл .sks:

enter image description here

Источник
Ron Myschuk
8 апреля 2018 в 15:45
0

какие симптомы? какие-то ошибки или спрайты просто не отображаются? почему у вас нет zPosition для ваших спрайтов? попробуйте установить zPosition и посмотрите, появятся ли они

Max Kortge
8 апреля 2018 в 23:24
0

@RonMyschuk Я не получаю никаких ошибок, они просто не появляются. Я установил zPosition на обоих из них на 1,0 и 2,0, поэтому таппер находится над кругом, все то же самое в симуляторе.

Jean-Baptiste Yunès
10 апреля 2018 в 08:05
0

Что-то не так с файлом .sks? Откуда взялся этот черный квадрат?

Max Kortge
10 апреля 2018 в 08:22
0

@Jean-BaptisteYunès Я ничему не верю. Я добавил его изображение в свой основной пост.

Jean-Baptiste Yunès
10 апреля 2018 в 08:26
0

@MaxKortge Вам нужно найти, откуда взялся этот черный ящик! Из того, что вы дали, его там быть не должно...

Max Kortge
10 апреля 2018 в 08:27
0

@ Jean-BaptisteYunès Я знаю это, но, как вы сказали, его там быть не должно, и я совершенно не знаю, куда идти.

Max Kortge
10 апреля 2018 в 23:07
0

@Jean-BaptisteYunès Я обнаружил, что черный ящик появляется, когда я добавляю круг в качестве дочернего элемента в игровую сцену во время движения, и после его удаления я только что заметил, что таппер движется в верхнем правом углу экран.

Jean-Baptiste Yunès
11 апреля 2018 в 04:54
0

Похоже, у вас проблемы с загрузкой изображений... Количество узлов кажется правильным (раньше этого не замечал: сцена + два добавленных узла).

Ответы (0)