首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在GameScene中重新启动和显示

在GameScene中重新启动和显示
EN

Stack Overflow用户
提问于 2015-09-27 16:07:46
回答 1查看 206关注 0票数 0

你好,我的问题是,当我点击一个按钮重新启动我的游戏,它将重新启动,但如果我点击一个按钮,过渡到MainMenuViewController的场景将冻结。有趣的是,如果我重新启动游戏并先点击segue按钮,它会正常工作,但是如果我单击“重新启动”按钮,游戏就会冻结。当单击segue按钮并使其崩溃时,当它第一次确实工作时,我得到的错误没有带有标识符'GameToMain‘的segue。当我点击重新启动游戏,它将只是崩溃,没有错误。以下是解决此问题的相关代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class GameViewController: UIViewController {
    override func viewDidLoad() {
    super.viewDidLoad()
    let skView = view as! SKView
    let scene = GameScene(size: skView.bounds.size)
    skView.showsFPS = true
    skView.showsNodeCount = true
    skView.ignoresSiblingOrder = false
    //skView.showsPhysics = true
    scene.scaleMode = .AspectFill
    skView.presentScene(scene)        
    scene.viewController = self
}
}

class GameScene: SKScene, SKPhysicsContactDelegate {
var viewController: GameViewController!

这是在玩家输掉时调用的函数中设置的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    let tryAgain = SKLabelNode(fontNamed: "Chalkduster")
    tryAgain.text = "Try Again?"
    tryAgain.color = SKColor.yellowColor()
    tryAgain.name = "retryLabel"
    tryAgain.fontSize = 28
    tryAgain.position = CGPoint(x: size.width/2, y: size.height/2)
    playerLayerNode.addChild(tryAgain)

    let mainMenuTransition = SKLabelNode(fontNamed: "Chalkduster")
    mainMenuTransition.text = "Main Menu"
    mainMenuTransition.color = SKColor.yellowColor()
    mainMenuTransition.name = "mainMenuTransitionSeque"
    mainMenuTransition.fontSize = 20
    mainMenuTransition.position = CGPoint(x: size.width/2, y: size.height/2 - 60)
    playerLayerNode.addChild(mainMenuTransition)

这是标签注册和响应被点击的方式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    for touch in (touches ) {
let location = touch.locationInNode(self)
     let node = self.nodeAtPoint(location)
            if (node.name == "retryLabel") {
                print("restart")
                let gameScene = GameScene(size: self.size)
                let transition = SKTransition.doorsCloseHorizontalWithDuration(0.5)
                gameScene.scaleMode = SKSceneScaleMode.AspectFill
                gameScene.viewController = GameViewController()
                self.scene!.view?.presentScene(gameScene, transition: transition)
                print("complete Reload")
            }

            if (node.name == "mainMenuTransitionSeque") {
                print("go to main menu")
                self.viewController!.performSegueWithIdentifier("GameToMain", sender: self)
                print("complete2")

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-01 12:55:06

我用当前的代码解决了这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class GameViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    let skView = view as! SKView
    let scene = GameScene(size: skView.bounds.size)

    //skView.showsFPS = true
    //skView.showsNodeCount = true
    skView.ignoresSiblingOrder = false
    //skView.showsPhysics = true
    scene.scaleMode = .AspectFill
    scene.viewController = self
    skView.presentScene(scene)        

}

}

在GameScene中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var viewController: GameViewController!
  override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            let location = touch.locationInNode(self)
            let node = self.nodeAtPoint(location)
            if (node.name == "retryLabel") {

                let skView = view as SKView!
                let scene = GameScene(size: skView.bounds.size)
                skView.ignoresSiblingOrder = false
                scene.scaleMode = .AspectFill
                scene.viewController = viewController.self
                skView.presentScene(scene)
            }

            if (node.name == "mainMenuTransitionSeque") {
                self.viewController.dismissViewControllerAnimated(false, completion: nil)
                print("complete2")
            }

        }

    }
}

因此,基本上,为了重新启动场景,我将代码从GameViewController复制并粘贴到GameScene中,以便它能够准确地重新启动场景,但是关键是重新声明viewController变量。然后,为了进入mainMenu,我取消了视图控制器(GameScene),而不是创建一个新的segue,这样我就不会在彼此之上添加越来越多的场景。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32814126

复制
相关文章
在DataGrid中显示图片
    DadaGrid 是 ASP.NET 编程中一个很重要的控件,其优良的可定制功能为提高它的表现力提供了极大的方便。除了与数据源直接绑定以外,我们还可以通过列绑定模板对 DataGrid 的列进行自定义,来按照我们设定的格式显示数据。
Java架构师必看
2021/03/22
3.4K0
小技巧 - 在Finder中显示路径
即 option + command + P键 ,之后你的Finder就可以显示当前路径了!
老高的技术博客
2022/12/28
3.3K0
小技巧 - 在Finder中显示路径
&nbsp在IE和FireFox中显示不一致
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/38704045
DannyHoo
2018/09/13
1.3K0
&nbsp在IE和FireFox中显示不一致
在Inspector面板中显示变量和类(Unity3D)
Unity有一个强大的特性,它可以帮助我们在没有任何编程的情况下修改Inspector面板中的值。本文介绍了我们需要知道的所有信息,以便在Unity Inspector面板中显示我们的变量和自定义类。
恬静的小魔龙
2022/08/07
3.3K0
在Inspector面板中显示变量和类(Unity3D)
在Android中显示APNG动图
APNG(Animated Portable Network Graphics)是一个基于PNG(Portable Network Graphics)的位图动画格式,用途类似GIF,其诞生的目的是为了替代老旧的 GIF 格式。
Clayman Twinkle
2019/04/04
17.1K1
在Android中显示APNG动图
物联网和人工智能如何使公司在新冠病毒期间重新启动业务
artem-beliaikin-N35J0N8ZglQ-unsplash_副本.jpg
用户4122690
2020/07/14
7320
物联网和人工智能如何使公司在新冠病毒期间重新启动业务
在vue中解析md文档并显示
【说明:】markdown-loader、html- loader是为了让vue能够解析md格式的文件,读取出来,然后使用marked将读取出来的数据转换成html格式渲染到页面上。使用marked是为了使用更方便。
前端小tips
2021/11/30
6.3K0
在vue中解析md文档并显示
"0.1"在PL/SQL Developer和sqlplus中如何不显示为".1"?
微信群有朋友问,PL/SQL Developer显示0.1的时候自动将0删除,即".1",因此有什么方法,可以显示小数点之前的0?
bisal
2019/01/30
2.1K0
Fiddler 在列表中显示图片尺寸
https://docs.telerik.com/fiddler/knowledgebase/fiddlerscript/customizesessionslist
卓越笔记
2023/02/18
4.1K0
Fiddler 在列表中显示图片尺寸
在 WordPress 中如何定义字段依赖显示
WPJAM Basic 插件作为我们「WordPree果酱」团队所有插件和项目的基础,其中表单字段的渲染就是其中最重要的一个能力,我们做到了只需配置就能使用,无需额外增加页面的 JavaScript 的交互代码。
Denis
2023/04/13
8.5K0
Python在tkinter界面中显示matplotlib动画
在tkinter应用程序界面中同时显示matplotlib绘制的动态折线图、动态散点图和动态柱状图。
Python小屋屋主
2020/02/23
5K0
在 Python 程序中显示进度条
转自 http://my.oschina.net/jhao104/blog/681507 1、利用标准输出 先说一下文本系统的控制符: \r: 将光标移动到当前行的首位而不换行; \n:将光标移动到下一行,并不移动到首位; \r\n:将光标移动到下一行首位。 示例代码如下: import sys from time import sleep def viewBar(i): """ 进度条效果 :param i: :return: """
Crossin先生
2018/04/17
2.6K0
在 Python 程序中显示进度条
eglot 在 minibuffer 中显示错误信息
eglot 用得一直很顺,有一点不舒服的地方在于:当有错误时,必须把鼠标移上去才能看到,有些不符合全键盘的哲学理念。
飞驰的西瓜
2022/07/26
1.9K0
eglot 在 minibuffer 中显示错误信息
javascript表单提交的内容显示在表格中
实现三个文本域的内容提交之后显示在表格中,代码直接用文本文件运行,记得后缀改为.html 运行结果
别团等shy哥发育
2023/02/27
7.5K0
javascript表单提交的内容显示在表格中
idea中类中显示成员变量和方法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/147178.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/01
1.7K0
idea中类中显示成员变量和方法
linux中vim如何显示行数,vim 在linux下中如何设置显示行数「建议收藏」
softtabstop:表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用 expandtab 时特别有用。
全栈程序员站长
2022/11/16
6.6K0
velocity:在eclipse和ultraedit中增加对vm脚本语法的高亮显示支持
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/52329820
10km
2019/05/25
1.5K0
指针在液晶屏显示中的用法(二)
本文纯属虚构,如有雷同,基本不可能。 由于版式原因,如果要看代码部分,建议电脑端观看。
MCU起航
2020/06/29
2K0
MFC子窗口任务栏显示图标和主窗口最小化在系统托盘中显示图标
MFC子窗口任务栏显示图标很简单, 只需要在子窗口的初期化函数OnInitDialog()中添加ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW); 主窗口在系统托盘中显示图标以及恢复窗口是参考某位大神的代码 (一)  原理     1、最小化的原理:首先要将窗口隐藏,然后在右下角绘制图标。     2、恢复的原理:将窗口显示,再将托盘中的图片删除。 (二)程序实现     1、自定义消息WM_SHOWTASK:  #define WM_SHOWTASK (WM
Sindsun
2018/04/28
3.2K0
指针在液晶屏显示中的用法(一)
这天,老板给了一个任务,给他们公司的产品增加一个液晶屏LCD1602,显示五个页面,可通过上下按键进行切换。
MCU起航
2020/06/29
2K0

相似问题

在Gamescene中显示UIAlertViewController?

11

在UIAlertController中显示GameScene (SpriteKit/Swift)

35

在GameScene中显示AdMob间隙(SKScene)

11

GameScene.sks和GameScene.swift

10

UIActivityViewController在GameScene.swift中的显示

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文