关闭

flash游戏设计 (1)

966人阅读 评论(0) 收藏 举报

开始学习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 8duplicateMovieClip()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);

 

 

完成上面的工作之后,一个没有美工的游戏就完成了,剩下的需要我们增加开始设置,结束设置,游戏时间等等。

 

文章水平有限,望能见凉

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2013903次
    • 积分:35446
    • 等级:
    • 排名:第124名
    • 原创:1311篇
    • 转载:22篇
    • 译文:0篇
    • 评论:2139条
    公告栏
    是夏天带来了热情,
    还是热情与夏天恋爱了?
    我倾夏天的脚步,
    感受清风的凉意,
    在行云流水之中,
    追求一种人生哲学.
    QQ :877690056
    文章存档