swift - spritekit 场景转换不正确

标签 swift sprite-kit

我在用 swift 4 编写的 spritekit 应用程序的场景转换中遇到了问题

我有一个声明 EndScene 类的 gameover.swift 文件:

import Foundation
import SpriteKit

class EndScene: SKScene, SKPhysicsContactDelegate {


var RestartButton : UIButton!
var HighScore : Int!
var HighScoreLabel : UILabel!
var GameOverLabel : UILabel!
override func didMove(to view: SKView) {

    self.scene?.backgroundColor = SKColor.white

    RestartButton = UIButton(frame: CGRect(x:0, y:0, width: view.frame.size.width/3
        , height: 30))
    RestartButton.titleLabel?.adjustsFontSizeToFitWidth = true
    RestartButton.center = CGPoint(x: view.frame.size.width/2 , y: view.frame.size.height/1.5)
    RestartButton.setTitle("restart", for: UIControlState.normal)
    RestartButton.showsTouchWhenHighlighted = true
    RestartButton.setTitleColor(SKColor.black, for:  UIControlState.normal)
    RestartButton.addTarget(self, action: #selector(EndScene.Restart), for: UIControlEvents.touchUpInside)
    self.view?.addSubview(RestartButton)




    GameOverLabel = UILabel (frame: CGRect(x:0, y:0, width: view.frame.size.width/3.8, height: 30))
    GameOverLabel.center = CGPoint(x: view.frame.size.width/2 , y: view.frame.size.height/10)
    GameOverLabel.textColor = SKColor.red
    GameOverLabel.text = "Game Over"
    self.view?.addSubview(GameOverLabel)

}

func Restart(){
    RestartButton.removeFromSuperview()
    GameOverLabel.removeFromSuperview()
    self.removeAllChildren()
    self.view?.presentScene(GameScene(), transition: SKTransition.reveal(with: .up, duration: 0.3))


}

 }

GameScene 是在 GameScene.swift 文件中声明的类。它包含描述游戏过程的类声明。

问题是:

当游戏从 GameScene 启动时它工作正常(所有对象都被淹没并且物理工作)但是当我从 EndScene 重新启动游戏时它工作不正确(1 个对象不时被淹没但其他所有对象都没有淹没,即使背景颜色不会被淹没)。

一般可以搭配什么?

最佳答案

您不应该只是通过调用其无参数初始化程序来创建 GameScene。查看 GameScene 在生成的 GameViewController.swift 文件中是如何呈现的。您将看到它调用 (fileNamed:) 初始化程序。

所以改变这一行:

self.view?.presentScene(GameScene(), transition: SKTransition.reveal(with: .up, duration: 0.3))

self.view?.presentScene(GameScene(fileNamed: "GameScene"), transition: SKTransition.reveal(with: .up, duration: 0.3))

关于swift - spritekit 场景转换不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46887486/

相关文章:

ios - SpriteKit游戏中的AVAudioPlayer和性能问题

ios - 不知道如何将触摸作为单个实体处理

json - Swift - 从 Firebase 读取数据(实时数据库)

ios - 从 UICollectionViewController 制作一个 Popup ViewController

swift - 为什么速记参数名称在这个 Swift 闭包中不起作用?

ios - SpriteKit 按钮保持按下状态

swift - 检测两种相同颜色何时发生碰撞

swift - 为什么我的进度条不起作用? - Swift,Parse,我正在为这个而烦恼

ios - swift 扩展

swift - 粒子效果后如何从屏幕上删除 Sprite 节点