FLASH游戏制作:接宝石

FLASH游戏制作:接宝石

2004/11/7 2:24:00来源:本站整理作者:蓝点我要评论(0)

            
             
              
             
            

               
               

            



            

接宝石在Flash中也是比较经典的一种游戏类型,主要运用了鼠标对游戏中对象的控制,hittest测试碰撞,游戏中记时和记分的方法,可以说此游戏中运用的技术在Flash游戏制作中很具有代表性,可以说此类技术在游戏制作中的通用性也比较强,学习此游戏的制作方法,可以在其它游戏的制作中起到举一反三的作用。(本例的.swf和.fla文件请点击这里下载)

游戏方法:

此游戏主界面如图1所示:



图1

游戏中玩家主要使用鼠标来控制下面的小人左右移动,以便接到不断落下的宝石。宝石的类型分为三中,接到不同的宝石得分不同,其中接到一个蓝宝石会得5分,接到一个红宝石或者黄宝石会得3分,不过如果游戏中落下的全是宝石游戏也没什么意思了。游戏中还会不断落下黑色的炸弹,如果不小心接到了炸弹,则会从总分中扣除5分,所以在忙于珍贵的宝石的同时,也需要注意不要接到炸弹,不然可就惨了。

游戏有一定的时间限制,游戏剩余时间会显示在右上角,玩家应该在时间限制内尽量多接宝石,以取得高分。

游戏制作思路:

此游戏玩法简单,制作思路也很清晰。总体上可以分为4大部分:

第一部分:游戏中小人的控制,游戏中需要使用鼠标来控制小人左右移动,以便接到宝石,此部分的实现较简单,只需要使用startdrag函数即可以实现。

第二部分:宝石和炸弹的不断下落:游戏中宝石和炸弹需要不断的随机下落,可以运用random和duplicatemovieclip两个常用函数来实现,前一个函数用来产生随机数,随机控制宝石的初始坐标位置,后一个函数用来复制出更多的宝石,两个函数结合在一起,就可以制作出宝石不断随机下落的效果。

第三部分:宝石接到与否的判断,此功能需要使用hittest碰撞测试函数来检测,使用也相对简单。

第四部分:游戏中的记分和记时:此部分需要用到动态文本框的设置,和一些时间函数,关键是时间为零后要立刻结束游戏。

通过上面的制作思路的分析,可以看出如果将此游戏作适当的分解,一步一步来制作,其实并不难,所以一个游戏在制作前进行适当的分析和规划是很重要的。

下面我们就来按照上面规划好的制作思路来具体制作此游戏


游戏制作步骤:

游戏素材的准备:

1. 进一步往下制作前需要准备好游戏中需要的素材,此游戏一共需要五个素材,分别是蓝色宝石,黄色宝石,红色宝石,炸弹和小人,素材的获得有很多方法,可以直接从外部文件中获得,也可以自己动手在Flash中绘制,图2所示为本游戏中的宝石和小人:



图2

2. 分别将蓝色宝石,黄色宝石,红色宝石和炸弹制作成相应的Graphic组件,然后新建一个Movie clip组件,将小人图象拖进去,并重命名为小人。现在游戏中一共有5个组件,分别是Graphic组件蓝色宝石,黄色宝石,红色宝石和炸弹以及Movie clip组件小人。

游戏中主要组件的制作:

1.记时器的制作:游戏中需要用到一个记时器,用来记录游戏的剩余时间,本游戏时间限制为100秒,并进行倒记时,时间为0后则游戏结束。新建一个Movie clip组件,重命名为mTimebar,进入组件的编辑状态后,使用文本工具在编辑区的中心输入”剩余时间”几个字,然后新建一个图层layer2,在文字下面使用文本工具绘制一个文本框,在Properties属性面板中设置此文本框的类型为Dynamic text动态文本,设置为动态文本框的原因是游戏中此文本框的时间会不断变化,所以需要设置为动态的,然后设置此文本框的变量名为txt,设置变量名的目的是为了使用Action控制文本框中的内容,如图3所示:



图3

将图层layer1和layer2都延长到第3桢,然后新建一个图层并重命名为Actions,在此图层的第1 关键桢添加如下as:

now = new Date();

startTime = now.getTime();

hasTime = 100;

txt = hasTime;

//第一句创建了一个新的Date日期对象now,然后第2句将当前时间赋给变量//startTime,接下来将值100赋给变量hasTime,最后一句将变量hasTime的值100设//置为文本框的初始值。

此图层的第2 关键桢添加如下as:

now = new Date();

tempTime = now.getTime();

txt = hasTime-int((tempTime-startTime)/1000);

if (!txt) {

_root.gotoAndStop("end");

this.stop();

}

//第一句创建了一个新的Date日期对象now,然后第2句将当前时间赋给变量//tempTime,第三句将表达式hasTime-int((tempTime-startTime)/1000)的值设置给//文本框,tempTime-startTime为当前时间与初始时间的差,也就是已经花掉的时间,

//此值再被hasTime减去,则为剩余时间。If语句判断文本框中的值是否为零,如果//剩余时间为零,则主场景中会跳到最后一桢并停止,意味着游戏结束。

此图层的第3关键桢添加如下as:

gotoAndPlay (_currentframe-1);

//如果剩余时间不为零,自然会播放到此桢,但是为了持续记数需要返回到上一桢播放,//所以_currentframe-1达到了此目的


2. 分牌的制作:游戏中需要显示玩家的得分,所以需要一个得分牌。新建一个Moview clip组件,重命名为mScorebar,进入组件编辑状态后,按照制作记时器的方法制作一个”得分”的文本和一个动态文本框,同样将此文本框设置个变量名txt,然后新建一个图层,重命名为actions,再此层的第一祯添加如下as:

txt = _root.score;

//将主场景中的变量score的值赋给得分文本框,关于变量score,将在主场景中//进行说明。

3. 宝石变化组件的制作:游戏中掉下的宝石或者炸弹是随机出现的,所以我们这里可以使用一点制作技巧,将所有将要落下的物体放到一个mc里,但是分别放到不同的关键桢中,这样只需要使用as随机调用不同的桢即可实现随机掉下不同的宝石的效果,所以这里新建一个movie clip,重命名为mstonepics,在图层layer1中插入四个连续的关键桢,分别将炸弹,红宝石,黄宝石和蓝宝石放到第1到第4关键桢中。

4. 随即下落宝石MC的制作:游戏中宝石需要随机下落,所以这里专门制作一个movie clip来进行宝石随机下落的控制,新建一个movie clip组件,重命名为mFallingStone,进入组件的编辑状态后,将图层layer1重命名为StonePics,并将此图层延长到第三桢,然后将组件mStonePics拖到此层,并在Proiperties属性面板中将其命名为stone,如图4所示:



图4

再新建一个图层,重命名为actions,在此图层的第一关键桢添加如下as:

var plusScore;

//定义变量plusScore,用来代表不同宝石所有的不同分数

i = Math.random();

//使用random随机函数产生随机值在0到1范围内的值,并赋给变量i

if (i<0.5)

//如果产生的随机数小于0.5,则执行下面的代码

{

Stone.gotoAndStop(1);

plusScore = -5;

}

// 组件Stone将停止在第一桢,也即放置炸弹的那一桢,并且将-5赋给代表加分的变//量plusScore

else if (i<0.7)

//如果产生的随机数大于0.5而小于0.7,则执行下面的代码

{

Stone.gotoAndStop(2);

plusScore = 2;

}

// 组件Stone将停止在第2桢,也即放置红宝石的那一桢,并且将2赋给代表加分的//变量plusScore

else if (i<0.9)

//如果产生的随机数大于0.7而小于0.9,则执行下面的代码

{

Stone.gotoAndStop(3);

plusScore = 2;

}

// 组件Stone将停止在第3桢,也即放置黄宝石的那一桢,并且将2赋给代表加分的//变量plusScore

else

//如果产生的随机数大于0.9而小于1,则执行下面的代码

{

Stone.gotoAndStop(4);

plusScore = 5;

}

// 组件Stone将停止在第4桢,也即放置蓝色宝石的那一桢,并且将5赋给代表加分//的变量plusScore

this._x = random(560)+20;

this._y = -10;

//设置不同宝石的随机坐标,横坐标的范围为20到580之间,纵坐标统一为-10

speed = 10+random(20);

//变量speed为下落速度,范围为10到30之间
在此图层的第2关键桢添加如下as:

this._y += speed;

//设置宝石的新坐标为原坐标加下落速度

if (this._y>420)

{

this.removeMovieClip();

}

//如果宝石的纵坐标超过420,也即到达舞台的最下面,说明没有被接到,所以使用//removeMovieClip()删除此mc,也即没有被接到的宝石从游戏中消失

else if (this._y<=320 && this._y+speed>=320)

{

disX = Math.abs(this._x-_root.Man._x);

if (disX<30)

{

_root.score += plusScore;

this.removeMovieClip();

}

}

//如果宝石的纵坐标不到320,但是再下落一个speed值便超过320,说明宝石已经被//接住了,所以得分增加,然后删除宝石

在此图层的第3关键桢添加如下as:

gotoAndPlay (_currentframe-1);

//重复播放上一桢

布置主场景:

最后的步骤就是步骤主场景了,制作好上面的所有组件以后,返回到主场景中。

1. 首先将默认图层layer1重命名为bg,然后延长到第5桢,此图层用来设置背景,使用矩形工具画一个和舞台一样大小的矩形,并填充上适当的颜色,如图5所示:



图5

2. 新建立一个图层命名为Buttons_Man,用来放置游戏中需要用到的一些控制按钮,首先制作一个控制开始游戏的按钮放置在第1桢,给按钮添加as:

on (release) {

gotoAndPlay(2);

}

然后在此桢加上游戏的开始画面,如图6所示:



图6

在第2关键桢将组件小人拖到舞台的下方,并在属性面板中给组件设置实例名为man,如图7所示:



图7


在第5桢插入一个关键桢,添加一个时间到达的提示按钮,给按钮添加如下as,以便控制游戏的重新开始:

on (release) {

gotoAndStop(1);

}

//返回第一桢的游戏开始界面,重新开始游戏

3. 新建一个图层命名为bar,用来放置积分牌和记时器,因为主场景的第一桢为游戏开始界面,所以需要将第一关键桢删除,将组件mScoreBar和mTimeBar拖动到第2关键祯,如图8所示:



图8

4. 最后再次新建一个图层重命名为actions,用来放置一些控制用的action,在第一桢添加as: stop();,以使游戏一开始停止在第一桢的开始界面,在第2桢添加as:

startDrag("Man",true,20,320,580,320);

//对小人进行拖动,切设置好了拖动的范围,以使小人只可以在水平方向上移动,//而不可以在垂直方向上移动。

mcDepth=0;

score=0;

//定义两个变量值,其中score为游戏的得分

在第3桢添加as:

if (Math.random()<0.2) {

_root.attachMovie("fallingStone", "s"+mcDepth, mcDepth);

mcDepth++;

}

在第4桢添加as:

gotoAndPlay (_currentframe-1);

//返回上一桢继续播放

给第5桢设置桢标签end,如图9所示:



图9

5. 最后主场景中时间线如图10所示:



图10

到此为止,接宝石这个游戏就制作完成了,制作过程其实很简单,关键是制作前的规划和制作思路的总体设计,这样制作起来就有一定的针对性,可以做到有的放矢

阅读本文后您有什么感想? 已有 人给出评价!

  • 0 囧
      囧
  • 0 恶心
      恶心
  • 0 期待
      期待
  • 0
      难过
  • 0 不错
      不错
  • 0 关注
      关注
  • 最新评论
  • 热门评论
共有评论(0)条 查看全部评论
高兴 可 汗 我不要 害羞 好 下下下 送花 屎 亲亲

注:您的评论需要经过审核才会显示出来