开始学习flash的基本游戏编程时候,其实需要用到很多关于游戏方面的书籍,同时对flash编程需要有一定的了解这样我们就可以发现flash游戏其实并不是很难。万事开头难,有了基础之后我们会发现as 编程其实是很有趣的。
前期篇:
前期工作:
设计游戏之前,我们需要对游戏前期的工作加以重视,很多人一开始就拿着代码就去写。随着游戏设计进度越来越后,会发现很多设计上的问题都会出错,这个时候,不得不重新规划,不得不重新书写代码。这样的工作是多么痛苦与悲哀。因此,在游戏代码之前,我们应该把目光转移到文档设计上。分析游戏设计架构,人物角色,关卡,窗体大小等等。把我们的游戏设计的理念都规划好,那么我们的日后的工作就可以减少不必要的错误
设计期:
设计一个什么样的游戏才好呢?这个问题,当我们面对的时候,会发现不是代码不会写,不是美工不会做,而难题就是我们该设计一个什么样的游戏才好呢?的确,这样的话题需要我们对游戏有一定的认识,例如rpg角色扮演游戏,棋类游戏,射击的游戏等等。这些游戏的类型,我们需要对其有一定的了解,当我们打算设计一个rpg的游戏的时候,我们考虑到剧本,考虑到角色设计,考虑到游戏的世界观一系列相关的问题,我们把这样的问题收集起来作为我们游戏设计工作的指导。
下面是一个简单的小球碰撞方块的游戏例子:
初始化篇:游戏设置
窗口设置:flash 场景为 600x400
游戏开始结束控件。
游戏时间等
初始化篇:角色
这里我用了两个主要的元件:
一个名字为ball的影片剪辑,
一个是含有两层的影片剪辑方块
初始化篇:之操作篇
设计:游戏开始的时候,我们除了为添加角色外其次就需要为要为角色添加行为,利用控制对小球加以控制
操作设置;
第一部分,我建立起一个名ball 的影片剪辑,在影片剪辑里面进行对它四个方向的操作
onClipEvent (enterFrame) {
if(Key.isDown(Key.LEFT))
{
this._x-=8;
}//定义小球左边操作
if(Key.isDown(Key.RIGHT))
{
this._x+=8;
}//定义小球右边操作
if(Key.isDown(Key.UP))
{
this._y-=8;
}//定义小球上边操作
if(Key.isDown(Key.DOWN))
{
this._y+=8;
}////定义小球下边操作
}
第二步:使小球活动的范围控制在600x400之间防止小球出界,我们需要进行一些简单的判断就可以实现了小球范围的控制。
onClipEvent (enterFrame) {
if(Key.isDown(Key.LEFT))
{
this._x-=8;
if(this._x<-37)
{this._x=636;}
}//定义小球左边操作
if(Key.isDown(Key.RIGHT))
{
this._x+=8;
if(this._x>636)
{this._x=-37;}
}//定义小球右边操作
if(Key.isDown(Key.UP))
{
this._y-=8;
if(this._y<-37)
{this._y=437;}
}//定义小球上边操作
if(Key.isDown(Key.DOWN))
{
this._y+=8;
if(this._y>437)
{this._y=-37;}
}////定义小球下边操作
}
而这里就只是增加了四个方位的控制,防止小球走出外面的边界,这很容易理解
丰富游戏的内涵:
一部电影,只是一个角色参与舞台上,当你看了你会觉得有什么感受?有一个喜剧导演steven wright 说过一句有趣的话:生日那天别人送我一台加湿器和一台干燥器。。。我把他们放在一间房子里面让它们打架。
这里我们不难发现电影中存在各种各样的矛盾。那么游戏也会同样存在矛盾吗?答案:存在。哲学家相信世界上事事矛盾,时时矛盾。好的游戏,不单是靠代码完成,更加需要的是,让游戏里面的矛盾充分发挥
第三步:我们需要创造小球之外的另一个角色,――方块并为这个方块加上一个下落的行为:
onClipEvent (enterFrame) {
this._y+=4;
}
这里的下落速度是4
两个角色已经创造完了,现在我们开始把两个角色让他们产生矛盾,一起在这个舞台上上演一幕精彩的打斗
分数计算:设置一个动态文本,设置变量score ,新建一个图层名为:code
选择code层第一帧输入score=0;,初始化分数值;
第四,让方块与小球产生碰撞,产生矛盾。来吧现在开始他们打斗了。首先选择fang影片剪辑,在影片剪辑添加下面的碰撞判断
onClipEvent (enterFrame) {
this._y+=4;
if(this.hitTest(_root.ball))
{
_root.score+=5;//分数值增加,注意初始化变量
trace("dd");
}
}
这里使用了hitTest碰撞函数,让小球ball 与方块fang 进行碰撞,每次碰撞分数score 就会加上五分
到了这里,我们的初始化任务就完成了一半左右,接下来的工作,就是要求我们让这两个角色丰富游戏的内涵,接下来就是使用复制的函数,把一个方块变成多的方块其目的就是增加了fang的特性。
进一步设计:
复制影片剪辑:
谈到flash的复制函数,不可以不说flash 8的duplicateMovieClip()和attachMovie()这两个强大的函数,很多flash就是利用这两个函数来创出很多神奇的效果,闲话少说,现在马上来看一下;写代码之前,先把我们之前创造的fang元件删除,在库里面选择链接,标识符为fang ,选择第一帧导出
跟着打开fang影片剪辑,再把里面的方块转化为名为samllfang影片剪辑元件即两次转化
在samallfang影片剪辑里面添加动作行为
onClipEvent (enterFrame) {
this._y+=4;
if(this.hitTest(_root.ball))
{
_root.score+=5;//分数值增加,注意初始化变量
trace("dd");
removeMovieClip(_parent);
}
}
这个跟我第一fang元件是差不多,多的只是一个removeMovieClip(_parent);
目的就是除去我们复制的影片
下面就是代码模块了
方块复制,我们使用到的是attachMovie() 这个函数,这个函数可以让我们舞台上的方块,由一块变成两块,到多块。
下面是一个创建方块的函数creat_fang()
score=0;//初始化分数
attachMovie("fang","newfang",1);
newfang_width=newfang._width;
newfang_height=newfang._height;
num=1;//创建方块数目
function creat_fang(){
name="newfang_"+num;
attachMovie("fang",name,num);
_root[name]._x=random(600);
num++;
}
复制完这后,测试影片可以发现场景上只有一个方块在动,但我们需要的方块在一断时间间隔内出现,这时候就要求我们开始使用到setInterval这个时间调用函数,在flash游戏创造里,这个时间的概念是不可以忘却,需要我们时时刻刻记住,建立起一个体系
好,下面我们把这个函数添加上去在第一帧里面,这里发现了,场景上在3000毫秒之内出现不同的方块在动,这时候flash游戏就初步形成了,是不是觉得很兴奋呢?
fang_id=setInterval(creat_fang,3000);//
code图层的第一帧的代码:
score=0;//初始化分数
attachMovie("fang","newfang",1);
newfang_width=newfang._width;
newfang_height=newfang._height;
removeMovieClip("newfang");
num=1;//创建方块数目
function creat_fang(){
name="newfang_"+num;
attachMovie("fang",name,num);
_root[name]._x=random(600);
num++;
}
fang_id=setInterval(creat_fang,3000);
完成上面的工作之后,一个没有美工的游戏就完成了,剩下的需要我们增加开始设置,结束设置,游戏时间等等。
文章水平有限,望能见凉