前一阵子,开发了个24点游戏的,用的as3.0 。
开发前对flash和as3.0并不是很了解,简单的语法是知道的。
flash里面因为可以做movieclip,创建动画对象真是很方便。其他语言中的自定义控件,在as3中几乎是原生功能。
支持类,支持多个文件的代码组织,简单项目用起来还是很方便的。
是否有解,用了个递归算法,感觉效率还是挺高的。
表达式计算走了捷径,调用了eval。合法性检测,直接加了点代码。
试玩地址:
算24点
http://85xt.cn/vod_play.aspx?indexid=0&_id=1448
扫雷
http://85xt.cn/vod_play.aspx?indexid=0&_id=2261
下面做一个扫雷程序。
用mc作为基本元件,用数组保存生成的mc对象。banding对象的事件,大致代码如下。
for(var i:int=0;i<rows;i++)
{
for(var j:int=0;j<cols;j++)
{
crnt=i*cols+j;
btns[crnt]=new btn();
btns[crnt].x=j*17+25;
btns[crnt].y=i*17+50;
btns[crnt].addEventListener(MouseEvent.CLICK,btnOnMouseClick);
btns[crnt].ismine=0;
btns[crnt].minearound=0;
btns[crnt].tag=crnt;
addChild(btns[crnt]);
}
}
mc有12帧,表示有n课雷等12种状态。
点击的时候判断这个mc附近有几个类。
flash么有右键,所以,单击为标记,双击为打开。没有问号状态。
双击打开,要支持智能判断,就是如果是0颗雷,则把这一大片都打开。
flash本身不支持双击。不过简单的代码就可以解决这个问题,具体google下。
比较难得是如果点到空白处要把周围的8个都打开,并且如果碰到空白的还要打开。这里考虑了下,用递归来做。
当感觉有时候会卡一下,然后没有右键真的很麻烦。
发现gotoandplay代码的效率很低。有条复位语句和自动打开空白的递归很慢,发现都是gotoandstop造成的。trace了下,基本每个mc占40ms。
似乎bitmapdate可以解决这个问题。
mc中的每帧改成位图,速度有20%左右的提高。
如果把mc中的12帧删除掉,剩下一帧,速度就很快了。
gotoandstop用draw来做。
有个flash游戏优化技巧的文档,不错的。
现在的思路是在mc里放一个bitmap。然后根据情况画这个bitmap。
如何访问mc中的子元件呢?
最后的方法是生成bitmap,然后在一个空的mc里,addchild。
图像原件不是位图,好像不能在as3中使用。外部导入的bmp文件,倒是可以导出到as3种使用。
加载库中的位图对象的代码如下
var bb1:Bitmap;
if(i==0)
bb1=new Bitmap(new graybmp(0,0));
mc.addChild(bb1);
这个速度很快。帧多的话判断比较多,写成一个函数,用起来也很方便。
另外stage对象无法在主函数获取到,相关解释查google。
我因为想获得一个全屏幕响应的键盘事件而已,所以在第一帧中调用stage就可以了。
然后碰到的问题是改变鼠标形状的问题。
只能通过mc跟随鼠标来解决。
as3的编译器还不够强大,错误提示很不爽。
剩下的就是程序逻辑了。
2个程序基本都是300行左右的代码,写小程序真是比做大项目有意思。不用考虑复杂的需求。。
2012-5-26今天开始想做俄罗斯方块
第一个问题就是不规则形状的碰撞检测,规则形状可以通过distance来判断,不规则形状就难多了。
google下,as3有自带方法,bitmapdata,有hittest方法。所以用两个bitmapdata就可以了。
每个block是一个bitmap,然后背景是一个bitmap。
检测到碰撞,则停止移动。并且把对于的内容复制到背景。
动手了。