《iOS和tvOS 2D游戏开发教程》——第2章,第2.3节旋转僵尸

2.3 旋转僵尸
僵尸移动的很不错,但是它总是朝着相同的方向。实际上,它是“亡灵”,但是,这个僵尸总是对什么都好奇,它很想在移动的时候转身到处看看。

我们已经有了一个向量指向僵尸所要朝向的方向,这就是速度向量。只需要找出一个旋转角度,让僵尸朝向该方向就可以了。

再一次,把方向向量当做是直角三角形的斜边,就可以找到这个角度,如图2-22所示。

图2-22

你可能还记得,三角学中所谓的正切函数,表示为:

tan(angle) = opposite / adjacent

既然有了对边和邻边的长度,可以将上面的公式重写为如下的形式,来得到需要旋转的角度:

angle = arctan(opposite / adjacent)

如果回忆不起来任何三角学的知识,也不要担心。只要把这当做是计算角度的一个公式就可以了,只需要知道这些就够了。

尝试使用这个公式,添加如下的新的方法:

func rotateSprite(sprite: SKSpriteNode, direction: CGPoint) {
   sprite.zRotation = CGFloat(
      atan2(Double(direction.y), Double(direction.x)))
}

这里用到了上面的公式。它包括很多的强制转型,因为CGFloat在64位的机器上定义为一个Double,而在32位的机器上则定义为一个Float。

这能够有效,是因为僵尸图像本身是朝向右边的。如果僵尸图像是朝向屏幕上方的,还必须添加一个额外的旋转来进行补偿,因为角度0本来是指向右边的。

现在,在update()方法的末尾调用这个新的方法。

rotateSprite(zombie, direction: velocity)

编译并运行,僵尸已经旋转到面朝它移动的方向了,如图2-23所示。

图2-23 

恭喜你,已经让僵尸具有了生命了!这个精灵现在在iPhone和iPad上都能够平滑地移动,可以从屏幕弹回并且会旋转,是开始玩这个游戏的最佳时机了。但是,我们还没有大功告成。应该自己尝试一些内容,以确定已经学到了知识。

时间: 2024-10-03 16:07:47

《iOS和tvOS 2D游戏开发教程》——第2章,第2.3节旋转僵尸的相关文章

《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.1节Sprite Kit游戏循环

第2章 手动移动iOS和tvOS 2D游戏开发教程Ray Wenderlich撰写 如果你完成了第1章的挑战,现在屏幕上已经有一个较大一些的僵尸了,如图2-1所示. 图2-1 注意 如果没有能够完成挑战或者跳过了第1章,也不要担心,直接打开本章的初始工程,从第1章留下的地方继续进行.当然,你想要让精灵移动起来,而不只是站在那里,这个僵尸也渴望动起来. 在Sprite Kit中,要移动一个精灵,有两种方法: 1.在第1章中,你可能已经注意到了(如果看一下Apple所提供的模板代码的话),可以使用一

《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.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和tvOS 2D游戏开发教程》——第2章,第2.2节移动僵尸

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

【J2ME 2D 游戏开发系列】◣HIMI游戏开发启蒙教程◢JAVA零基础学习J2ME游戏开发全过程!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/j2me-2/774.html Himi从写博客的最早开始就是Android游戏开发相关的,其实那么很多童鞋也知道Himi是做Java-J2me/Kjava出身,所以不少童鞋还在问我是否可以写一些J2me的相关游戏开发博文.虽然j2me趋势随着Nokia的没落和Android的崛起已经慢慢被弱化掉,但是J2me也是早些年非常火的平台不是么!

HTML 5 2D 游戏开发:Sprites

和其他艺术形式(比如电影.戏剧和小说)一样,游戏也有一系列的人物,每个人物都扮演着特定的角色 .例如,Snail Bait 有跑步小人(游戏主角).硬币.红宝石.蓝宝石.蜜蜂.蝙蝠.纽扣和一个蜗牛,图 1 中展示了其中的大多数角色.在本系列的第 1 篇文章中(参阅 sprite:演员表 小节),已经介绍了这些 人物以及它们在游戏中的角色. 图 1. Snail Bait 的人物 开发:Sprites-html5 2d游戏引擎"> Snail Bait 中每个人物都是一 个 sprite.S