cocos2d第一个游戏

4 你的第一个游戏

4.1 按部就班地创建项目

       任何非源代码文件都被当做资源,无论是图像文件、声音文件、文本文件还是plist文件。分组并不是必须的,但如果坚持对同类文件进行分组,那么这将为理清项目带来很大便利。

4.2 添加Player Sprite

       注意:iOS游戏首选的图像文件格式是PNG(Portable Network Graphic,便携式网络图像),这是一种压缩文件格式,然而与JPG文件不同的是,PNG采用了无损压缩,保留了原始图像所有像素。你也可以保存不经压缩的JPG文件,不过对于同一个图像,PNG文件的大小明显要比未经压缩的JPG文件小。但是这只会影响应用的大小,而不会影响纹理对内存(RAM)的使用。

       注意:

       记住,在iOS设备上文件名是区分大小写的。如果你视图加载Alien.pngALIEN.PNG,在模拟器上会成功加载文件而在iOS设备上则不会,因为文件真正的名字是alien.png,字母全部小写。这就是坚持统一的命名约定——例如强制所有文件名使用小写字母——的意义所在。

       注意:无论如何都要尽量避免使用固定的位置值。如果你只是把玩家为之设为(160,32),此时你就做了两个本该避免的假定。第一,假定了屏幕的宽度为320像素,但并不是每个iOS设备都是这样的。第二,你假定了图像的高度是64像素,然而那也是可能会改变的。一旦你开始像这样做假定,整个项目过程中你就会逐渐形成这样的习惯。

       用很多代码来定位对象,但长远来看这样制作会节约大量时间。可以将项目部署到不同的设备,也可以使用不同尺寸的图像,无论如何项目都会正常运行。

4.3 加速剂输入

       与其他编程语言(如javaC++C#等)不同,像player.position.x+=value这样的语句对Objective-C中的属性是不起作用的。问题出在Objective-C中属性的工作方式以及Objective-C所基于的C语言的赋值机制。

       player.position.x语句实际上是调用了positiongetter方法[player position],这意味着你实际上获得了一个临时的position值,并试图改变这个临时的CGPoint对象的x成员变量。但之后这个临时的CGPoint对象会被丢弃。于是positionsetter方法[player setPosition]就不会自动被调用了。所以只能直接对player.position进行赋值。

4.4 首次测试运行

       如果尚未在Xcode中为这个项目安装你的开发授权,将会产生CodeSign错误。在iOS设备上运行程序时需要代码签名证书。

4.5 玩家速度

       实现加速与减速概念不在于直接修改玩家的位置值,而是使用单独的CGPoint变量作为速度矢量。每次接收到一个加速计事件时,速度矢量就加上从加速计得到的输入。当然,这意味着我们得把速度限制在一个任意的最大值内,否则减起速来就要花点时间了。不管有没有接收到加速计的输入,在每一帧都把速度加到玩家位置上。

       注意:为什么不使用动作来移动玩家精灵呢?无论何时你需要频繁地——如,每秒数次——改变对象的速度或方向,使用move动作都不是一个好的选择。动作适用于相对使用周期较长的对象,所以频繁创建新对象在分配释放内存上增加了额外开销,这会使游戏性能大幅下降。

       更糟糕的是,如果不为动作留出一点时间,动作是不会执行的。这就是在每帧添加新动作来替换前一个却没有任何效果的原因。

       注意:imageWidthHalved的是用contentSize的宽乘以0.5而不是除以2得到的。这是个有意的选择,而且两者结果相同,因为任何除法都可以被改写成乘法的形式。

       update方法在每一帧都会被调用,而在每帧都调用的代码应该以最高速度运行,并由于iOS设备的ARM CPU不支持硬件上的除法运算,因此乘法运算通常要更快一些。

4.6 添加障碍物

       获取图像尺寸最简单的方法就是创建一个临时的CCSprite对象。

       将初始化精灵和配置精灵分开处理的原因在于:游戏总会结束,之后游戏将被重置。最为高效的做法就是将所有游戏对象移动到它们的初始位置。然而,一旦游戏趋于复杂,这种做法将不具备可行性。最终,最简单的做法就是以玩家为代价重新加载全部场景。

       提示:

       如果不是绝对必要的话,为了节约CPU资源,最好不要在for或其他循环语句中使用方法调用作为循环条件。

4.7 碰撞检测

4.8 得分标签

       CCLabel只在频繁更改其字符串时才会运行缓慢。如果一次创建一个CCLable对象并永不更改,那么它使用起来就会和相同尺寸的CCSprite对象一样快。

4.9 CCBitmapFontAtlasHiero简介

       注意:在游戏中使用位图字体是个很棒的选择,但位图字体也有很大的不足之处。任意位图字体的大小都是固定的。如果需要同一字体的不同字号,可以缩放CCBitmapFontAtlas——但这样会损失图像质量。你还可以另外创建一个与原来字体大小不同的字体文件,但是这样会使用更多内存,因为即使只有字体大小不同,每个位图字体也都有其特有的纹理。

       注意:如果使用CCBitmapFontAtlas显示字符,当某些字符在.fnt文件中无效时,将会跳过这些字符而不显示它们。

4.10 添加音频

       cocos2d中播放音频文件最好,同事也是最简单的方法是使用SimpleAudioEngine。音频文件支持并不属于cocos2d的组成部分;它是CocosDenshion的主要部分,与物理引擎一样,同属于cocos2d的第三方插件。因此你必须在CocosDenshion音频功能时添加相应的文件。

       至于音乐,MP3文件是首选。注意,一次只能在后台播放一个MP3文件。

4.11 移植到iPad

       因为所有的位置坐标都考虑到了屏幕的尺寸,所以将游戏放大到iPad的大屏幕上运行应该不会有问题。

4.12 本章小结

<!--EndFragment-->

猜你喜欢

转载自bsr1983.iteye.com/blog/1628518