首先说一下什么叫CURD,按字母来看分别是create、update、read、delete,四个单词,狭义的说是数据库里面的一些操作,其实更广义的说这4个字母代表着所有的软件开发里面的内容,软件开发都是在处理数据,对数据进行增删改查。程序员其实一直都在做这些操作。而游戏开发是软件开发里面的一种,当然也符合这个规律。
flash游戏对于程序员来说其实就是对数据进行增删改查,外加上一些数据的逻辑操作。这里吐槽一下我以前做过的几乎所有flash游戏都被4399转载了,今天想说的一个射击游戏,上4399查了一下那个游戏的英文名字(话说我之前做的游戏都是卖到国外的,所以都是英文的)居然还被我查出来了。游戏名字是BakuganBattle Brawlers,中文名应该是爆丸吧。
不多说粘贴点代码吧:
//处理主角受伤
public function workHurt()
{
if (state == "die")
{
this.filters = new Array;
return;
}
var tempArr:Array = new Array;
if (hurtCount > 0)
{
hurtCount--;
tempArr.push(new GlowFilter(0xFF0000, Math.sin(hurtCount * 0.25) * 0.5 + 0.5, 4, 4, 20));
this.filters = tempArr;
}
else
{
this.filters = new Array;
}
}
上面的代码的是写在主角类里面的,所以this.filters是直接可以用滤镜的,这里用了红色,效果就是让主角受到攻击后根据帧频去更新hurtCount这个值,然后根据这个数所得的正弦曲线来变化这个滤镜,会得到渐变有渐变无的效果。当然这里还可以用其他方式实现,用一些缓动类,例如Tweener或者TweenMax也可以做到的,这些类是别人写好的开源工具,有兴趣同学可以去看一下,功能也挺强大的,我有些游戏也用到了这些工具。还有一个比较酷的效果如下:
//产生残影效果当过关的时候主角飞走的时候会一直调用这个方法按照一个频率一直复制出当前主角的残影
public function showBitMap()
{
var bitMap:Bitmap = DisplaytoBitMap.ChangetoBitMap(actor);
shadow.addChild(bitMap);
}
//更新残影层需要放到enterFrame里面一直刷这个函数
public function workShadow():void
{
var len:int = shadow.numChildren;
if (!len)
return;
var tempMc:Bitmap;
for (var i:int = 0; i < len; i++)
{
tempMc = shadow.getChildAt(i) as Bitmap;
if (tempMc.alpha > 0)
{
tempMc.alpha -= 0.1;
}
}
}
//返回的Bitmap的坐标位置与Dis容器的位置相对应
public static function ChangetoBitMap(Dis:DisplayObjectContainer):Bitmap
{
var tempbitmapdata:BitmapData = new BitmapData(Dis.width / Dis.scaleX, Dis.height / Dis.scaleY, true, 0x00000000);
var rectangle:Rectangle = Dis.getBounds(Dis.stage);
var mix:Matrix = new Matrix;
mix.tx -= rectangle.x;
mix.ty -= rectangle.y;
tempbitmapdata.draw(Dis,mix);
var tempbitmap:Bitmap = new Bitmap(tempbitmapdata);
tempbitmap.x += rectangle.x;
tempbitmap.y += rectangle.y;
return tempbitmap;
}
上面的代码是在主角过关之后调用的,作用是会产生残影,通过showBitMap()产生MovieClip的位图对象,然后通过workShadow()去更新所有的残影位图对象的透明体以达到效果。话说我做了这么久,很多时候为了方便都把方法写成公有,变量的话有时懒得整get跟set方法,不过还是建议弄get跟set方法,我这只是为了项目能更快完成而偷懒的。很多时候最快的达到目的才是工作的所要做的,所有会让效率降低的东西一律去除,如果说我是做科研的话,必须是不能错而且要严谨的做。但真正的项目开发根本不能去考虑那些浪费时间没有效果的东西。这就是现实丫。在开发的过程中,很多时候是身不由己的,写一个功能想到了就直接写,方法笨不笨不用管,这个达到目的就可以了,而且要快。谁还会去想一大堆算法什么的,直截了当的做就行了。例如A*算法,这个我直接网上搜一下别人写好的,直接拿来用,就得了,难道我还自己写一个出来?这在实际开发中根本不允许。