今天呢·无比懒散的DreamFairy作为一个骑行者狂飙了一下午后,回到电脑前。看到社区里之前做 “熊猫快跑” 的作者放出了心得啦。于是乎,果断转载过来。 DreamFairy也打算参加 腾讯的线上游戏开发项目呢。

以下是文章原文啦:

原文作者:Hack86????

? ?? ?随着Air2.6大面积推广,Adobe毫不忌讳的踏入了移动领域。在苹果手机和安卓手机大肆PK的今天,平台市场和内容市场也新兴而起,笔者也拿起了笔,不对,准确的说是键盘和鼠标,来尝试一下,如何用熟悉的ActionScript3来开发一款可以跨平台的游戏。

?


??????打开Flash Builder 发现新建里多了两个清新的选项,那就传说中的手机项目,新建后发现和普通项目并没有什么不同,只是多了一个主类同名的XML文件,用他可以配置一些手机上的特性,比如开关GPU,比如横屏锁定等等,除了这个几乎和别的AS项目没有任何不同的地方,感觉完全没有任何门槛,只能一个字来表示,那就是:刺激。

? ?? ? 在移动平台中开发思路上可能会有些变化,但是总体上没有任何问题,以下是我开发收集的一些经历,比如我们习惯性用键盘按键来发射子弹,但是平板手机中是没有键盘的,所以改成了触屏,而这在PC上表现为鼠标点击,所以实现就变得通俗容易,并且测试的时候也是用鼠标点击,在细节上会有些变化,比如按钮的划过状态在手机上消失,因为手机上快走指针,只有点击,同理监听MouseMove事件的时候 不用再判断是否MouseDown 因为在手机上不可能在未Down的情况下促发Mouse事件,这些都是一些细节上的不同,但是在实现上方案和传统的一样容易,所以为移动所付出的额外代价只是这些细节,如果你开发3个平台以上的话,那么这些细节需要多多考虑,但是比起重新开发三个版本,那这成本几乎是可以忽略不计的。所以还是那两个字:爽。

? ?? ?启动游戏后,在手机上运行了下,效果没有想象的好,FPS一路走低,由于AS3的所有事件都是被异步优化后基于Frame来执行的,所以虽然理论上帧率过了24就可以消除卡的感觉,但是24fps状态下的操作延迟将近40多毫秒的延迟手感和体验都是比较差的,特别是对于动作游戏,如果你是策略的菜单游戏,那么24基本就可以接受了。但如果要做动作游戏,还是要达到普通人类下意识反应速度18毫秒以内,也就是55fps以行。那么优化也是一个非常大的问题,其实很多朋友会把过多的优化思考在变量的多少或者对象的GC上,其实他只是内存优化,而帧率的根本问题还是画面重绘。AS3是非常高级的语言,我们不需要太多低级的操作方法,只需要在画面上让重绘区域尽量减少,让重绘区域中的层数尽量维持在最少的图层,并且全部都使用位图,如果担心文件体积过大,可以导入矢量素材,用bmp来转换成位图也是一个很好的方法,当然手机资源有限一定要注意释放。经过以上基本简单的优化和设计上的规避,笔者的第一款游戏成功的达到了55fps以上,当我看到帧率发生了如此明显的变化后,我真是激动不已,如果你有兴趣的话,也马上动手来试一试把。……

 

 

 

 

昨天测试网游的时候,发现同步其他人动作的时候,出了个神奇的bug. 只同步了阴影,人物的皮肤还停留在原地不动。

于是检查了下代码,发现阴影填充Bitmap,之后addChild(Bitmap) 。这应该是阴影和贴图不同步的原因。 但是嘛~之后做了个Demo似乎又没问题了。嘛~总之不管它了,换一个方法来实现。

索性就用 graphics.beginBitmapFill。然后呢 beginBitmapFill 是第一次用啊,一开始以为直接把 BitmapData丢进去就好了。结果发现显示不出来。然后就在那冥思苦想啊。然后觉得 有Begin嘛,肯定又要有End 于是加了个 endFill() 还是显示不出来。 于是就想莫非还要画个形状?

于是使用如下代码完成了整个贴图的绘制:

 
[cc lang=”actionscript3″ nowrap=”false”]
/**玩家皮肤**/
_bmd=skin;
this.graphics.beginBitmapFill(_bmd,new Matrix(1,0,0,1,-_bmd.width/2,-_bmd.height),true,false);
this.graphics.drawRect(-_bmd.width/2,-_bmd.height,_bmd.width,_bmd.height);
this.graphics.endFill();
/**绘制阴影**/
this.graphics.beginFill(0x000000,.7);
this.graphics.drawEllipse(-20,-20,40,20);
this.graphics.endFill();
[/cc]

果断成功了,有木有。因为都是直接画上去的,不是addChild上去的。所以皮肤和阴影都是一体的。

嘛~之前的服务端和客户端都完成了呢,感觉很有成就感。 但这只是网游的基础通信部分啦。

最近把客户端方面的引擎做完了。

包含了以下技术呢:

1.自动人物贴图,可以将一张8*8的人物素材图,自动切割合并成动画数组,然后动态调用。可以说写成了一个可以复用的模块呢。

2.45度地图引擎,参考了许多老外的实例,还有<FLASH高级动画教程>还有论坛上许多朋友的例子。总算自己写了出来呢。

还有好多很有趣的小技术啦。

下面是实例哦:[玩法:鼠标点击地图上有方块地点,人物就会自动绕开障碍走过去哦~]

在进入正题之前,先来电前情提要的说~

一周前,嚷着要做一个【FLASH客户端,JSON数据包,SOCKET连接,MYSQL数据库。ASWING框架。】网游的DreamFairy,在努力奋战3天,结果如下。。。

ASWING用起来很给力,界面很清爽,灵活性很高,还附带一个图形化界面编辑器。但是!很悲催的是采用了ASWING的项目,即使这个项目只有不到10k!它都要编译20秒左右。。。我实在没有耐心,果断放弃ASWING。

JSON可以十分简单的封装一个对象,其优势是没有XML那么复杂的各种节点。但是其实自身的废节点还是很多的说(一个月前,DreamFairy完全没听说过JSON为何物)。但是,之前做聊天室的时候,都是传ooxx=A&xxoo=B 这样的长字符串。确实没JSON封装的好啊。所以就抱了个死理,一定要用JSON做数据包传输。在AS3中只需要一个JSON类即可。但是在JAVA里解析JSON数据包,就需要JSON-LIB和其依赖的4个包。。。我好不容易找齐它们,结果用起来十分的麻烦。最后不得不放弃,难道DreamFairy又要用回ooxx=A&xxoo=B这样来传输数据么?

搜索遍各种后台技术后,发现了一个叫amf的协议。是adobe为flex开发的一种数据传输协议,可以把对象转换为二进制耶。于是果断放弃JSON,采用amf来做数据传输! 下面进入正题。

由于之前完全用过amf,等于是从0开始学了。连续2个通宵查找amf的教程,大部分都是amfphp的。java的资料非常少。在网上找到部分的代码。如下:

Continue reading

命运的齿轮已经开始转动,不达到既定的命运,便不会停止呢~

两周的台风天终于过拉,福州也终于开始是晴天了。闲置了2周没骑的山地车,昨天骑去江边兜风了一圈回来,双腿疼死了。啊啊!果然我平时还是运动太少了啊。

下半年的计划已经确定了呢~java服务端(VS太大了,笔记本装不下),FLASH客户端,JSON数据包,SOCKET连接,MYSQL数据库。ASWING框架。设计模式模块化。年底的FLASH PLAYER 11 3D。 完成一个多人3D网游吧~

啊啊~我果然是个技术宅啊,研究技术真的是一件很爽的事情。有时候真的感觉自己就像神一样的创造着一个个虚拟世界,给虚拟世界创建自然法则。

然后~放上小圆脸某合唱角色曲:

?????? 来公司有一段时间了,也基本实现了我之前那小小的计划- 就是在短短的时间内把这个公司的技术全部学到手。=。= 这一段时间好拼,即使下班了也继续写着代码。

公司之前有个程序员,同事们一直说他代码写得好,要学习他的代码结构。说实话,我刚拿到他源码的时候,真的看的很晕。因为用了各种设计模式~ 于是我花了两周时间,啃下了两本厚厚的设计模式的书。还在自己手头的项目上试着使用设计模式。

一段时间后,回去看同事的源码才发现,其实他写的并不好。要做出一个游戏,重要的是算法。他的算法确实写的简练有效率,这必须得佩服他。但是他的代码结构实际上是设计模式滥用过度了。一个小游戏原本十个类左右的,为了追求设计模式,拆分成二十几个类,有的类中只有5-6行代码。之后做游戏调试的话,很难找出错误在哪,并且一个月后如果自己看自己的代码也会犯晕一会儿。

公司最近在招服务端的人才,作为公司唯一的程序部门的成员之一,发现正式职员中没有一个人会这方面技术的。我也明白大家的苦衷,年长的人没有激情去学,年轻的人被公司的工作时间安排的没有自由时间学习。那么大家一直停留在小游戏这种层次上,虽说已经可以拿到这个城市的中等以上工资了。但是这不是我的追求。

我写过聊天室,知道php与flash的短链接交互。在公司又学到了协议(之前根本不知道协议长什么样,怎么实现),自己还研究过C#的服务端守护程序等等。。。我觉得自己有潜力独立开发一套网游引擎的。 很庆幸周围的同事很热情,遇到的问题都技术教我解决。现在自己已经也已经能独立写各种算法,也知道遇到没写过的算法,思考的方向该在哪。A*寻路就是其中之一,到时候让自己的网游加入寻路也已经是计划内了。

很庆幸,我大学还没有毕业,我有足够的时间来学习这些技术。也很庆幸还没毕业的我已经有丰富的工作经验,有了自己工具库和游戏框架,2天快速开发一个游戏已经毫无压力了。快开学了,我要好好利用这最后一个学期的时间挑战自己的极限,小游戏已经不能满足我了。而这个公司也不是我的终点站,这个公司或许是你们的极限,但一定不是我的。

好吧~ 目前公司在做的一个项目。山寨某经典游戏打豆豆。。。今天把源码放出来。

话说这个游戏只写了3天就就写完了,之后一直在优化的说。目前算法部分还在继续优化中,这个版本就把前一版放出来吧。诸位请笑纳~ 😀

为规避法律责任,我把游戏内的素材全部替换成某RPG的武器图标,同时移除所有和项目有关的界面文字说明。

以下是游戏演示:

游戏规则:鼠标点击空白区域,若点击区域的4个方向有至少2个图标花纹相同,则图标消失,玩家得分。 若点击区域周围的4个方向没有任何一个图标花纹相同,则扣取10秒游戏时间。

PS: 由于自己替换的素材图标颜色都一样,容易看花眼,所以我把游戏难度设置为5种花纹。50个图标总数。 所以!你们是肯定无法过关的,因为原版是7种花纹,200个图标总数,过关分数是消除60个花纹! 大家玩玩第一关体验下就好啦。? 大家也可以直接下载源码回去改难度的说!

下载地址:点我下载

😀 给力啊,谷歌。看来买的defy终于不是后妈养的了。可以准时更新啦。

下面是新闻原文的说。

摩托罗拉于2011年1月被分拆为摩托罗拉移动及摩托罗拉解决方案两大分公司,摩托罗拉移动主要负责生产智能手机以及电视机顶盒产品。

谷歌今日宣布,已与摩托罗拉移动签署最终协议, 将以每股40美元的现金收购后者,总价约125亿美元,与摩托罗拉移动上周五收盘价相比溢 价63%。该交易已经得到两家公司董事会的批准。

摩托罗拉是专注于Android平台的合作伙伴,收购该公司,将使谷歌大幅强化Android生态系统,增强移动计算领域的竞争。摩托罗拉移动仍将获得Android系统许可,且Android系统仍将保持开放。谷歌将把摩托罗拉移动作为一个独立业务运营。

值得注意的是,官方在新闻稿中承认是为了专利而收购。

—-

话说~最近博客一直没有更新比较给力的作品和源代码呢。啊啊,主要是这里的网络慢啊。不出意外的话,这周末回家,换上给力的网络,将做换血大更新啊。

话说~前天才想起huge drive 帐号的说。怎么才用了2天就挂掉了。。不知道神马时候能恢复啊。o(︶︿︶)o 唉,害的之前的植物大战僵尸山寨版显示失败的说。

话说之前想做的很霸气的独立小游戏,一直都没时间做。为了给自己一个交代,随便就结尾了第一关。很多系统都没有完善的说。还是先放上来吧。

最近好忙啊~先是一个政府的单子要搞什么社区,各种框架和前后台接口都要下。 然后就是腾讯的Q宠又要做一款坑爹的游戏了。。。 所以手头有两个项目压力好大o(︶︿︶)o 唉。项目组老大还说连续8天加班超过23点了!!!? 程序员很辛苦的有木有啊!!!

然后~前几天看到 异国迷宫的十字路口 网络放送版里有一首很赞的歌曲。很好听,果断传上来做博客背景音乐,并设置自动播放的说哦。


玩法:黄色球是阳光,每次收集后,左上角的money数+5. 当你有10元的时候,就可以点击下方的 红球 购买 红球(植物)啦。 然后进行种植。 黑球是僵尸啊僵尸。很坑爹是不是!! 博主很懒,大家要体谅。
顺便 输赢判定没有做。 僵尸不会攻击植物。 只有植物打僵尸的份。大家随便体验体验就好啦。

好久没更新博客啦。 最近工作都很忙的说。 之前有看到植物大战僵尸的教程。 于是花了一个下午写了个demo版本出来。

by the way.突然发现自己以前有申请过一个国外的网盘,质量不错的。所以以后非正式的作品都放到网盘上啦。等到完整版的时候再放到自己控件。

所以呢,可能访问网盘的资源速度会比较慢吧。

顺便发下公司妹子们的睡觉图,渣画质。