`

[air for ios] 三小时开发一个iOS飞行射击游戏

    博客分类:
  • IOS
阅读更多

[air for ios] 三小时开发一个iOS飞行射击游戏

http://www.badyoo.com/index.php/2012/07/04/158/index.html

2012-07-04

好吧,这次这个demo 没什么难度,主要是思路,这个文章主要讲解是air在移动端的优化:

 

一部飞机。重力感应控制移动。点击屏幕发射直线子弹。一些飞过来的敌人。

子弹击中飞机屏幕晃动。

游戏最终效果截屏(PC或Mac上需要使用Flash CS6的模拟器来测试重力感应操控,方法在这里 Flash CS6 体验尝鲜(4)——使用模拟器模拟测试移动端AIR应用 ):

 

三小时开发一个iOS飞行射击游戏001.jpg

最终发布的ipa文件下载 (支持iPhone/iPad需要越狱,文件大小为4.78M)

首先本教程用到的东西:
badyooFramework Rc1.2 :http://115.com/file/beov8dbg
本文章源码:http://115.com/file/e71nf1au
第一步:
当然准备资源了,这里头,准备了一些游戏资源。资源来自 coocs2d 的一个例子,资源包括一下几个东西:
  • 五个船的逐帧动画;
  • 一个陨石;
  • 星河背景;
  • 银河系;
  • 类似太阳的球体;
  • 类似光斑的玩意;
  • 类似黑洞的玩意;
  • 一个子弹;
接着全部绑定bitmapdata 导出swc库供游戏使用;如果你完全不会导出或者绑定?那么可以以下我录制的视频:

三小时开发一个iOS飞行射击游戏002.jpg

Ps:在这里如果位图一多时,大家可能会不知怎么去绑定bitmapdata好。这里只要在库面板里ctrl +a 全选所有位图右键一起绑定。
第二步:
在flash builder 4.5以上新建一个ios的手机项目。Air的sdk用air 3.3的。因为最新版的对手机端是有优化的。

 

然后手机设置这里,目标平台选择ios ;权限只要全屏;其他默认;

三小时开发一个iOS飞行射击游戏003.jpg

下一步在构建路径那把下载下来的badyooFramework Rc1.2的swc库给添加进来:

三小时开发一个iOS飞行射击游戏004.jpg

Ok项目建立完成;

接下来修改air 配置文件,该文件在src 下一个后戳为xml的文件;

打开修改几处地方,如果你找不到那么就查找下面几个字段吧:
如果实在不知什么意思那么看下面文章解救你:
<id > 修改成的配置文件id 这个必须的。所有ios 应用开发都要用证书;
<aspectRatio > 修改成 landscape 这个意思是让程序横屏;

<renderMode> 修改成gpu 这个是程序的渲染模式主要有三个模式 cpu gpu , or direct
< requestedDisplayResolution> 修改成 standard 因为我们的资源是iphone版的所以使用标准的分辨率即:iphone 系列 480 *320 ipad 1024*768;

三小时开发一个iOS飞行射击游戏005.jpg

修改项目属性下的编译器属性;

 

在附加的编译器参数下加入:
-optimize=true 这个官方文档说是优化程序用来着
-version=16 这个是因为air 3.3对应的播放器版本是16
-include-libraries ../Assets.swc 把刚刚我们做的swc资源库给编译进游戏中

三小时开发一个iOS飞行射击游戏006.jpg

第三步:
首先讲解文档类

三小时开发一个iOS飞行射击游戏007.jpg

文档类在这个游戏中的作用:
设置整个程序的大小,帧频。对齐方式。启动多点触摸。设置游戏品质。初始化游戏资源。初始化游戏场景;

 

下面的类就不一一说明的。代码内都有注释;

 

游戏的逻辑:
飞机就只有一个移动没有别的都东西,那么直接用重力感应进行位置的移动:

三小时开发一个iOS飞行射击游戏008.jpg

子弹的逻辑:

子弹主要是依靠游戏的主循环进行碰撞判断还有移动,然后就是子弹的移除了,因为你子弹是一直创建的,所以超出屏幕或者碰到敌人就删除吧:

三小时开发一个iOS飞行射击游戏009.jpg

怪物逻辑:

其实就是一直向坐标走。没有别的,还是有就是死亡了,新建一个敌人在所有敌人的最后面。

三小时开发一个iOS飞行射击游戏010.jpg

最后讲重点吧,as3 在移动端的效率优化:

1: 由程序的架构开始,游戏要适应不同的平台,那么ios上主要是iphone 还有ipad。 我们针对两个平台使用一下分辨率 iphone 480*320  ipad1024*768;

2:游戏品质设置成”LOW”就可以了。因为游戏使用的是位图,所以这个品质不会影响到游戏的画面,但是可以提高游戏很好的效率。

 

3:还有你会发现我游戏里只有一个主循环。然后主循环执行需要循环判断的对象内一个frame方法,这是因为一个游戏最好使用一个主循环,而不是监听更多的主循环。这样可以提高一定的效率;

三小时开发一个iOS飞行射击游戏011.jpg

4:对象的引用问题,直接引用比遍历效率高,不要什么东西都依靠遍历,如果你游戏主角只有一个。那么要进行判断的时,只要多的去跟少的进行判断,而不是少的去遍历多的。

5:代码上的优化,其实这个很多人应该都知道,在数组长度不是经常变化时,建议用一个int来记录长度,之后的for循环去跟这个值进去比较遍历,而不是去访问数组的长度;

还有在这里说明一点,Vector 效率是不如array 的 而官方解释是说Vector效率高于array。但是我在无数实验中,发现效率最高还是array;

三小时开发一个iOS飞行射击游戏012.jpg

6:注意游戏内存的使用,手机游戏一般都是那些在这个场景使用才会去加载,使用。不用的内存记得即时删除回收内存。适当的使用Gc ,flash自带的Gc在手机端是可以使用的。还有Gc方法在电脑上调试时,。如果你在程序启动1秒内,也就是第一帧时使用gc,那么程序就会卡死。这个是编译器的问题。10.1以上的flash播放器都会 回收不在显示区域30秒后的位图内存。这个会导致你下次使用这个位图,程序底层会在内存中重新new 。那样程序将出现假死。

7;位图的使用,手机游戏就不用说了,都是使用位图的,不管是oc 或者c++做ios游戏都是使用位图的。而我的位图引擎那么快,原理就是上面这几点。不说笑。效率在低端机子别starling这些stage3d引擎效率还要高。不要以为原生效率会比as3好多少,其实不怎样的,cocos2d这样的引擎, 在效率对比上跟as3的stage3d是差不多的。只是人家的代码执行效率会高很多。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics