分类分类
关注+2004-11-07作者:蓝点
接宝石在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
到此为止,接宝石这个游戏就制作完成了,制作过程其实很简单,关键是制作前的规划和制作思路的总体设计,这样制作起来就有一定的针对性,可以做到有的放矢
相关文章
更多+相同厂商
热门推荐
点击查看更多
点击查看更多
点击查看更多
说两句网友评论