游戏开发用到了很多小技巧,本章将不断更新,记录一些实用的知识。
本文仅供个人记录和复习,不用于其他用途
简单的碰撞检测
如果看了项目实战,就会发现那几个小游戏的碰撞检测实现的很巧妙。我们为角色建立一个等身的矩形,然后判断敌人的矩形和角色是否相互包含。这种方法实现起来很简单,不过要注意矩形的大小以及矩形的中心,在实际运用中要尽量贴近精灵的大小。
矩形与矩形碰撞
|
|
圆与圆碰撞
有时候物体的碰撞范围是一个圆,那么在与另一个圆碰撞时,只需检测圆心距是否小于两圆半径之和即可。
|
|
矩形与圆
看起来情况很多很复杂,但是我们只需简化一下,如下图:
我们让圆绕着矩形滚一圈,这个时候可以得到一个圆角矩形。很显然,只要圆心在这个圆角矩形内,那么圆和矩形就发生了碰撞。我们可以将圆角矩形分成四个圆角和十字形,然后判断圆心有没有落在十字形区域内。如果没有,那么再判断圆心是否在四个角,都没有的话证明没有发生碰撞。
|
|
最后要说的一点,这个并不是Box2D物理碰撞,这个只是小游戏中经常用到的技巧。
头文件相互包含
除了使用ifndef
之外,还可以将头文件的包含放到.cpp
中,这样不会发生问题。如果相互包含后出现找不到类的情况,那么可以在头文件中声明这个类。比如A.h
和B.h
相互包含,如果找不到类B
,那么可以在A.h
中声明class B
。
获取当前时间
我们使用随机函数或者做时钟时,经常要获取当前时间,那么可以使用以下方法:
|
|
顺便说一下,随机函数需要设立随机数种子,否则永远都是相同的数:
|
|
定义文件路径
每次在加载文件时,总要打上一长串的文件路径,显得很繁琐。我们可以找到applicationDidFinishLaunching()
这个方法,然后加上下面的代码:
|
|
这样一来,我们就将fonts
、image
、sounds
三个文件进行了定义,那么输入文件路径的时候也不需要再加上这些。
获取文件夹下所有文件名
|
|