《iOS和tvOS 2D游戏开发教程》——第2章,第2.1节Sprite Kit游戏循环

第2章 手动移动
iOS和tvOS 2D游戏开发教程
Ray Wenderlich撰写

如果你完成了第1章的挑战,现在屏幕上已经有一个较大一些的僵尸了,如图2-1所示。

图2-1 

注意

如果没有能够完成挑战或者跳过了第1章,也不要担心,直接打开本章的初始工程,从第1章留下的地方继续进行。
当然,你想要让精灵移动起来,而不只是站在那里,这个僵尸也渴望动起来。

在Sprite Kit中,要移动一个精灵,有两种方法:

1.在第1章中,你可能已经注意到了(如果看一下Apple所提供的模板代码的话),可以使用一个叫做动作(action)的概念,让精灵动起来。我们将在第3章中更详细地学习动作。

2.也可以用更为“经典”的方式来移动精灵,这就是随着时间流逝而手动地设置位置。先学习这种方式是很重要的,因为它提供了大多数的控制,并且将帮助你理解动作能做些什么。

然而,要随着时间流逝而设置精灵的位置,需要一个方法,让游戏在运行的时候周期性地调用它。这就引入了一个新的概念,即Sprite Kit游戏循环。

2.1 Sprite Kit游戏循环
游戏就像一个翻书动画一样地工作,如图2-2所示。如果你绘制了一系列连续的图像,当尽快地翻动它们的时候,就会产生移动的错觉。

你所绘制的每一个单个的图片,都叫做一帧(frame)。游戏通常会试图在每秒中绘制30到60帧,以使得动画给人流畅的感觉。这个绘制的速率,叫做帧速率(frame rate),或者更具体地称之为每秒帧数(frames per second,FPS)。默认情况下,Sprite Kit会在游戏的右下角显示这个数据,如图2-3所示。

图2-3 

注意

Sprite Kit默认地在屏幕上显示每秒帧数,这一点很方便,因为你在开发自己的游戏的时候,希望能看到FPS,以确保游戏能够很好地运行。理想情况下,我们希望FPS至少达到30。

然而,你只应该关注在一台真实设备上的FPS,因为在模拟器上所得到的FPS会颇为不同。特别是,你的Mac的CPU比iPhone或iPad的处理器要更快,而且Mac拥有更多的内存,但糟糕的是拖慢了模拟的熏染,因此,你不能指望Mac给出任何准确的性能数据。再强调一下,一定在真实设备上测试性能。

除了FPS,Sprite Kit还会显示它在最近一次循环中所渲染的节点数。

可以打开GameViewController.swift,并且把skView.showsFPS和skView.showsNodeCount都设置为false,从而从屏幕去除掉FPS和节点数显示。
在场景背后,Sprite Kit运行了一个无限的循环,我们通常称之为游戏循环(gameloop),如图2-4所示。

图2-4 

图2-4示意了在每一帧中,Sprite Kit都做如下的事情:

1.在场景上调用一个名为update()的方法。可以将想要在每一帧中运行的代码放到这里,因此这是更新精灵的位置或旋转精灵的好地方。

2.做一些其他事情。我们将会在后续的各章再次回顾游戏循环,以进一步理解图2-4中剩下的内容。

3.渲染场景。然后,Sprite Kit会绘制场景图中的所有对象,在场景背后使用OpenGL的绘制命令。

Sprite Kit试图尽可能快地绘制帧,最高可达到60FPS。然而,如果update()方法花得时间太长,或者如果Sprite Kit必须绘制的精灵比硬件一次所能处理的精灵更多的话,帧速率可能会下降。

1.保持update()尽可能的快。例如,在这个方法中,要避免那些较慢的算法,因为该方法在每一种帧中都会调用。

2.保持节点数尽可能的少。例如,当节点离屏并且你不再需要它们的时候,将其从场景图删除,这是一种好的做法。

现在,我们已经知道了update()会在每一帧中调用,并且这是更新精灵位置的好地方,让我们来尝试让僵尸动起来。

时间: 2024-09-15 20:53:24

《iOS和tvOS 2D游戏开发教程》——第2章,第2.1节Sprite Kit游戏循环的相关文章

《iOS和tvOS 2D游戏开发教程》——导读

目 录第一部分 基础知识 第1章 精灵 第1章第1节开始第1章第2节显示精灵第1章第3节开始第2章 手动移动第2章第1节Sprite Kit游戏循环第2章第2节移动僵尸第2章第3节旋转僵尸 第2章第4节挑战 第3章 动作第4章 场景第5章 相机第6章 标签第7章 初识tvOS第二部分 物理和节点 第8章 场景编辑器第9章 物理基础第10章 中级物理第11章 高级物理第12章 裁剪.视频和形状节点第13章 中级tvOS第三部分 果汁第14章 开发Drop Charge第15章 状态机第16章 粒子

《iOS和tvOS 2D游戏开发教程》——第1章,第1.1节开始

第1章 精灵 iOS和tvOS 2D游戏开发教程 Ray Wenderlich撰写 既然你已经知道了什么是Sprite Kit以及为什么要使用它,现在我们来自己尝试一下.我们将要构建的第一款小游戏叫做Zombie Conga,其完成后的样子如图1-1所示. 图1-1 在Zombie Conga中,你负责扮演无忧无虑的.只是想参加舞会的僵尸.好在,僵尸所占据的海边小镇有足够多的小猫.你只需要咬住这些小猫,它们就会加入到僵尸的舞队中来. 不过要小心疯狂的猫女士!这些身穿红色的衣服的老太太,对于想要偷

《iOS和tvOS 2D游戏开发教程》——第2章,第2.2节移动僵尸

2.2 移动僵尸我们打算通过5次迭代过程来实现僵尸移动的代码.这样,你可以看到初学者常犯的一些错误及其解决方案,最终,你会理解移动是如何一步一步实现的. 首先,实现一种简单但并不理想的方法,即在每一帧中将僵尸移动固定的数量.在开始之前,打开GameScene.swift并且在didMoveToView()中注释掉把僵尸的大小设置为其两倍的那一行代码,如下所示: // zombie.setScale(2) // SKNode method 这一行只是一个测试,因此,我们不再需要它了.正常大小的僵尸

《iOS和tvOS 2D游戏开发教程》——第1章,第1.2节显示精灵

1.2 显示精灵 在制作2D游戏的时候,通常要将表示游戏的各种要素的图像放置到屏幕上,如英雄.敌人.子弹等,如图1-18所示.这些图像中的每一个,都叫做精灵(sprite). 图1-18 Sprite Kit有一个叫做SKSpriteNode的特殊的类,它使得创建和使用精灵更为容易.我们就是使用这个类来为游戏添加所有的精灵的.让我们来尝试一下. 1.2.1 创建精灵 打开GameScene.swift,给didMoveToView()添加如下的一行,就放在设置了背景颜色之后: let backg

《iOS和tvOS 2D游戏开发教程》——第1章,第1.3节挑战

1.3 挑战 自行练习所学习过的知识,这对你来说是很重要的,因此,本书的每一章末尾都会按照从易到难的顺序,给出1到3个挑战. 我强烈建议你尝试一下所有的挑战,因为尽管按照这个按部就班的教程也可以学到东西,但通过自己解决问题,则可以学到更多的知识.此外,每一章都将从前一章的挑战所完成的地方开始继续,因此,你将会连续地学习. 如果你遇到困难,可以在本章的资源中找到解决方案,但是,要从本书中获得尽可能大的收获,在查看解决方案之前,请尽自己最大的努力去尝试. 挑战1:添加僵尸 现在,我们游戏有了一个漂亮

《iOS和tvOS 2D游戏开发教程》——第2章,第2.4节挑战

2.4 挑战本章有3个挑战,它们都很重要.完成这些挑战,能够让你练习使用向量,并且会引入新的数学工具,而在本书的剩下内容中,你将会用到这些工具. 同样,如果遇到困难,可以从本章的资源文件中找到解决方案,但是你最好是自己能够解决它. 挑战1:数学工具你肯定已经注意到了,在开发这款游戏的时候,经常要进行点和向量的计算,例如,把点相加和相减,求取长度值等等.我们还需要在CGFloat和Double之间做很多强制转型. 在本章中,到目前为止,我们都是以内嵌的方式自行完成这些计算的.这是做事情的一种很好的

【IOS-COCOS2D-X 游戏开发之六】使用BASE64算法对COCOS2DX自带CCUSERDEFAULT游戏存储数据编码加密!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/659.html 上一篇介绍了,如何使用Cocos2dX自带的CCUserDefault 存储游戏数据,那么Himi也提到此方式保存的为xml格式并且数据明文显示=. =,这个对于我们开发者来说太暴漏了有木有! so-本篇Himi分享如何使用经典Base64算法对CCUserDefault进行数据编码形成一种简

《HTML5完美游戏开发》——第1章 Open Web Game王国

第1章 Open Web Game王国 本章将介绍通过HTML5和JavaScript等技术开发Open Web Game的理念,包括这些技术带来的一些新特性,如GamePad API可以摆脱键盘和鼠标输入.在本章结束部分,介绍了如何发布游戏,以及如何让游戏给你带来盈利.另外,本章还列举了一些在Web发展成为游戏开发平台可行性方案的过程中,必定要发生的几个事件. 1.1 Open Web Game简介 我叫Rob Hawkes,是一个串行实验者(serial experimenter),专注于J

《HTML5完美游戏开发》——第2章 化繁为简2.1 自我介绍

第2章 化繁为简 本章我们来学习游戏设计,看一下如何设计一个简单有趣的游戏.以游戏"A到B"为例,本章重点讲一些游戏设计中的基本理论,另外还会讨论到JavaScript类库Processing.js在游戏"A到B"中的应用,以及这个类库在游戏开发中的优缺点. 我们将深入了解下面的内容. 游戏设计基础. 开发流程. Processing.js类库. 如何在HTML5游戏中应用Processing.js类库.译者注 "A到B游戏"是一种游戏类型,即通