flash 游戏 算24点,扫雷开发备忘。

前一阵子,开发了个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。

检测到碰撞,则停止移动。并且把对于的内容复制到背景。

动手了。

 

 

你可能感兴趣的:(游戏,算法,Google,Flash,编译器,distance)