iOS Sprite Kit教程之场景的切换

Sprite Kit中切换场景

每一个场景都不是单独存在的。玩家可以从一个场景中切换到另外一个场景中。本小节,我们来讲解场景切换。在每一个游戏中都会使用到场景与场景的切换功能,例如,在街机原始人游戏中,选择关卡这一场景中,可以看到有4关,这四关分别代表了4个场景,如图2.20所示。

 

图2.20  街机原始的关卡选择

当玩家选择第一关时,就会由选择关卡的场景跳转到第一关的场景中,如图2.21所示。

 

图2.21  第一关的场景

当玩家选择第二关时,就会由选择关卡的场景跳转到到第二关的场景中,如图2.22所示。

 

图2.22  第二关的场景

此时,它们就使用了到了场景与场景的切换功能,即当玩家轻拍相应的场景后,就会进入到到所选场景中。

Sprite Kit的单纯的场景切换

单纯的场景切换就是指,在场景与场景进行切换时是没有任何过渡效果出现的。切换时需要使用到presentScene(_ scene: SKScene?)方法。

【示例2-7】以下将以项目2-1为基础,实现在轻拍屏幕后,场景GameScene切换至NewGameScene的功能,具有操作步骤如下:

(1打开GameViewController.swift文件,在viewDidLoad()方法中的编写代码,实现在运行程序后,第一个显示的场景是GameScene,代码如下:

  • override func viewDidLoad() {
  • super.viewDidLoad()
  • let skView = self.view as SKView
  • if(skView.scene == nil){
  • skView.showsFPS=true
  • skView.showsNodeCount=true
  •   let scene=GameScene(size: skView.bounds.size)                                                 //创建场景
  • scene.scaleMode=SKSceneScaleMode.Fill
  • skView.presentScene(scene)                                                                                          //显示场景
  • }
  • }

(2打开GameScene.swift文件,删除touchesBegan(touches: NSSet, withEvent event: UIEvent)中的代码,在其中编写代码,实现触摸屏幕显示NewGameScene场景的功能,代码如下:

  • override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
  • var nextScene=NewGameScene(size: self.size)                                                            //创建场景
  •     self.view?.presentScene(nextScene)                                                                                 //显示场景
  • }

此时运行程序,会看到如图2.23所示的效果。

 

图2.23  运行效果

Sprite Kit在具有过渡动画的场景

使用单纯的场景切换会使游戏看起来十分生硬。所以游戏开发者为了解决这一不足之处,在切换过程中为游戏添加了过渡效果,使场景与场景切换更加舒适。这些过渡效果包括淡入淡出、水平关闭等,如表2-3所示。

表2-3  过渡动画

 

如果想要让一个场景在切换至另一个场景时可以使用到这些过渡动画,需要使用到presentScene(_ scene:SKScene?,
transition transition: SKTransition?)方法,其语法形式如下:

其中,_ scene表示新的场景,transition表示所使用的过渡动画效果。

【示例2-8】以下将在示例2-7的基础上实现在场景与场景切换时,加入一个旧场景从中间向两边打开,新场景从后方向屏幕靠近的过渡动画。具体的的操作步骤如下:

打开GameScene.swift文件,删除touchesBegan(touches: NSSet, withEvent event: UIEvent)中的代码,在其中编写代码,实现触摸屏幕显示NewGameScene场景的功能,代码如下:

  • override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
  • var nextScene=NewGameScene(size: self.size)
  •   var doors=SKTransition.doorwayWithDuration(0.5)
  •     self.view?.presentScene(nextScene, transition: doors)                                               //过渡
  • }

此时运行程序,会看到如图2.24所示的效果。

 

图2.24  运行效果

过渡动画除了可以使用在图2.24中所看到的外,还可以使用其他的效果,如以下的代码就使用了flipHorizontalWithDuration的过渡动画,即以水平中轴线垂直翻转的过渡动画,代码如下:

  • override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
  • var nextScene=NewGameScene(size: self.size)
  • var doors=SKTransition.flipHorizontalWithDuration(2)
  • self.view?.presentScene(nextScene, transition: doors)                                               //过渡
  • }

此时运行程序,会看到如图2.25所示的效果。

 

图2.25  运行效果

本文选自:iOS游戏框架Sprite Kit基础教程——Swift版大学霸内部资料,转载请注明出处,尊重技术尊重IT人!

iOS Sprite Kit教程之场景的切换的更多相关文章

  1. iOS Sprite Kit教程之场景的设置

    iOS Sprite Kit教程之场景的设置 Sprite Kit中设置场景 在图2.8所示的效果中,可以看到新增的场景是没有任何内容的,本节将讲解对场景的三个设置,即颜色的设置.显示模式的设置以及测 ...

  2. iOS Sprite Kit教程之真机测试以及场景的添加与展示

    iOS Sprite Kit教程之真机测试以及场景的添加与展示 IOS实现真机测试 在进行真机测试之前,首先需要确保设备已经连在了Mac(或者Mac虚拟机)上,在第1.9.1小节开始,设备就一直连接在 ...

  3. iOS Sprite Kit教程之滚动场景

    iOS Sprite Kit教程之滚动场景 滚动场景 在很多的游戏中,场景都不是静止的,而是滚动的,如在植物大战僵尸的游戏中,它的场景如图2.26所示. 图2.26  植物大战僵尸 在图2.26中,用 ...

  4. iOS Sprite Kit教程之编写程序以及Xcode的介绍

    iOS Sprite Kit教程之编写程序以及Xcode的介绍 Xcode界面介绍 一个Xcode项目由很多的文件组成,例如代码文件.资源文件等.Xcode会帮助开发者对这些文件进行管理.所以,Xco ...

  5. iOS Sprite Kit教程之编敲代码以及Xcode的介绍

    iOS Sprite Kit教程之编敲代码以及Xcode的介绍 Xcode界面介绍 一个Xcode项目由非常多的文件组成,比如代码文件.资源文件等.Xcode会帮助开发人员对这些文件进行管理.所以,X ...

  6. iOS Sprite Kit教程之申请和下载证书

    iOS Sprite Kit教程之申请和下载证书 模拟器虽然可以实现真机上的一些功能,但是它是有局限的.例如,在模拟器上没有重力感应.相机机等.如果想要进行此方面的游戏的开发,进行程序测试时,模拟器显 ...

  7. iOS Sprite Kit教程之使用帮助文档以及调试程序

    iOS Sprite Kit教程之使用帮助文档以及调试程序 IOS中使用帮助文档 在编写代码的时候,可能会遇到很多的方法.如果开发者对这些方法的功能,以及参数不是很了解,就可以使用帮助文档.那么帮助文 ...

  8. ios游戏开发 Sprite Kit教程:初学者 1

    注:本文译自Sprite Kit Tutorial for Beginners 目录 Sprite Kit的优点和缺点 Sprite Kit vs Cocos2D-iPhone vs Cocos2D- ...

  9. Sprite Kit教程:初学者

    作者:Ray Wenderlich 原文出处:点击打开链接 http://www.raywenderlich.com/42699/spritekit-tutorial-for-beginners 转自 ...

随机推荐

  1. 【leetcode 简单】 第五十六题 快乐数

    编写一个算法来判断一个数是不是“快乐数”. 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1.如 ...

  2. HDU 3535 AreYouBusy (混合背包之分组背包)

    题目链接 Problem Description Happy New Term! As having become a junior, xiaoA recognizes that there is n ...

  3. Java编程思想 4th 第1章 对象导论

    所有编程语言都提供抽象机制. 面向对象编程似乎是一种很好的编程思想和方式,面向对象编程中的对象简洁描述是:对象具有状态.行为和标识.状态指的是数据存储,存储的数据能反应状态:行为指的是方法,方法表示对 ...

  4. Java并发编程(2) AbstractQueuedSynchronizer的内部结构

    一 前言 虽然已经有很多前辈已经分析过AbstractQueuedSynchronizer(简称AQS,也叫队列同步器)类,但是感觉那些点始终是别人的,看一遍甚至几遍终不会印象深刻.所以还是记录下来印 ...

  5. [转]QVector与QByteArray——Qt的写时复制(copy on write)技术

    我们在之前的博文QVector的内存分配策略与再谈QVector与std::vector——使用装饰者让std::vector支持连续赋值中简单聊了聊QVector内存分配和赋值方面的一点东西,今天接 ...

  6. wamp中mysql安装时能启动,重启后无法启动的解决办法

    第一次安装wamp之后,所有服务可以正常使用,但是重启之后wamp的图标就变成黄色的了,重装了也这样 查看一下错误日志: 日志显示的错误是这样的: 日志提示可能是3306端口被占用的错误,那来看一下是 ...

  7. STL容器基本功能与分类

    STL有7中容器. 分别为: vector 向量 <vector>(头文件) 随机访问容器.顺序容器 deque 双端队列 <deque> 随机访问容器.顺序容器 list   ...

  8. C# Java 加密解密

    C# AES加密解密 public static string Encrypt(string key, string clearText) { byte[] clearBytes = Encoding ...

  9. 串口流控制详解(CTS/RTS,DTR/DSR)

    1 首先看下关于流控相关的几个端口的解释如下图 除了必要的地(GND)要连接外,其它连如下 步骤阅读 2 计算机和猫(MODEM)的连接 步骤阅读 步骤阅读 3 计算机和非猫的连接(null  mod ...

  10. -bash: /bin/rm: Argument list too long的解决办法【转】

    当目录下文件太多时,用rm删除文件会报错: -bash: /bin/rm: Argument list too long 提示文件数目太多. 解决的办法是使用如下命令: ls | xargs -n 1 ...