分享
 
 
 

一则响应鼠标打击的趣味动作实例

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

试试用鼠标煽他几巴掌或揣他几脚

一、实现思路

我们先来看看实例的效果,鼠标在场景中的不同地方划过,场景中的小人都会有不同的反应。尤其有趣的是,当鼠标划过的速度不同的时候,反应的强弱也是不同的。这就跟游戏中的实现很相似了。

总的来说,实现的思路大概是这样的:先制作好鼠标划过不同部位所响应的动作特效,再用几个Movie Clip来捕捉鼠标划过的位置跟速度,然后播放不同的动作特效,这就是我们所看到的效果。

二、实现过程

下面我们来看看具体的实现过程。

1、按“Ctrl + N”,新建一个Flash文件,按“Ctrl + F8”,新建一个Movie Clip,命名为“All Motion”。

2、进入此Movie Clip,用鼠标右键点击图层的名称,依次插入“label”、“Action”、“sound”、“idle”四个图层,在“label”层第一帧的属性面板上设置帧的label为“c_idle”,在第34帧上点击鼠标右键,插入一个关键帧,并设置此帧的label为“ML_w”,同理,依次在第47帧、第77帧、第89帧、第139帧、第154帧、第168帧、第220帧、第255帧、第267帧、第310帧、第358帧、第372帧、第430帧、第446帧上分别插入一个关键帧,并分别设置帧的label为“ML_s”、“MR_w”、“MR_s”、“TL_m”、“TL_w”、“TL_s”、“TR_m”、“TR_w”、“TR_s”、“B_m”、“BL_w”、“BL_s”、“BR_w”、“BR_s”。

3、在“Action”层的第33帧上面点击鼠标右键,插入一个关键帧,在此帧的Action Script面板上面添加语句:gotoAndPlay(1); 同理,在此层的第46帧、第75帧、第85帧、第120帧、第151帧、第165帧、第205帧、第252帧、第266帧、第301帧、第357帧、第369帧、第420帧、第440帧、第464帧分别插入一个关键帧,并分别在帧的Action Script面板上面添加语句:gotoAndPlay(1);

4、在“idle”图层的第34帧上面插入一个关键帧,在此图层第1帧的场景中用绘图工具画一个小人,如图1所示。这是在没有鼠标动作时候显示的。

图1

5、在“layer1”图层的第34帧和第45帧上分别插入一个关键帧,在第34帧至第45帧之间制作出当鼠标以比较慢的速度从小人的左边手臂处划过的Movie Clip效果。以此类推,在第34帧至第45帧之间制作出当鼠标以比较慢的速度从小人的左边手臂处划过的Movie Clip效果。在第47帧至第74帧之间制作出当鼠标以比较快的速度从小人的左边手臂处划过的Movie Clip效果。在第77帧至第84帧之间制作出当鼠标以比较慢的速度从小人的右边手臂处划过的Movie Clip效果。在第89帧至第119帧之间制作出当鼠标以比较快的速度从小人的右边手臂处划过的Movie Clip效果。

6、在第139帧至第150帧之间制作出当鼠标以中等的速度从小人的左边头部处划过的Movie Clip效果。在第154帧至第164帧之间制作出当鼠标以比较慢的速度从小人的左边头部处划过的Movie Clip效果。在第168帧至第204帧之间制作出当鼠标以比较快的速度从小人的左边头部处划过的Movie Clip效果。在第220帧至第251帧之间制作出当鼠标以中等的速度从小人的右边头部处划过的Movie Clip效果。在第255帧至第265帧之间制作出当鼠标以比较慢的速度从小人的右边头部处划过的Movie Clip效果。在第267帧至第300帧之间制作出当鼠标以比较快的速度从小人的右边头部处划过的Movie Clip效果。

7、在第310帧至第356帧之间制作出当鼠标以中等的速度从小人的腿部划过的Movie Clip效果。在第358帧至第368帧之间制作出当鼠标以比较慢的速度从小人的左边腿部划过的Movie Clip效果。在第372帧至第419帧之间制作出当鼠标以比较快的速度从小人的左边腿部划过的Movie Clip效果。在第430帧至第439帧之间制作出当鼠标以比较慢的速度从小人的右边腿部划过的Movie Clip效果。在第446帧至第463帧之间制作出当鼠标以比较快的速度从小人的右边腿部划过的Movie Clip效果。

8、至此,所需要的Movie Clip就制作完成。此时帧内的层结构应该如图2所示。注意,这是最花时间的一个步骤,也是对最终效果影响最大的一步,值得用心去做。如果想要更好的效果,可以在适当的地方插入声音效果。

图2

9、按“Ctrl + F8”新建一个Movie Clip,用绘图工具在这个Clip用画一个半圆。

10、回到影片的主场景中,在用鼠标右键点击图层名,插入4个图层,分别命名为“Action”,“Hit_Area”,“Motion_All”,“label”。

11、在“Motion_All”层的第2帧插入关键帧,在第7帧插入帧,将第1至8步所制作的Movie Clip从图库拖到场景中,在属性面板上设置实例名为“Motion_All”。

12、在“Hit_Area”层的第2帧插入关键帧,在第7帧插入帧,将第9步所制作的Movie Clip从图库拖六次到场景中,拼成一个图形如图3所示,并分别在属性面板上设置实例名为“Area_Head_Left”、“Area_Arm_Left”、“Area_Leg_Left”、“Area_Head_Right”、“Area_Arm_Right”、“Area_Leg_Right”。

图3

13、在“Action”层的第2帧插入关键帧,在第7帧插入帧,此时主场景中的层应该如图4所示。点击“Action”层的第2帧,在此帧的Action Script面板上面添加语句下所示。

图4

stop();

VEL_SAL_LIMIT = 70; // 注释1

VEL_HIT_LIMIT = 180;

DIVIDE_NUM_STRIKE = 30;

DIVIDE_NUM_HIT = 24;

DIVIDE_NUM_SAL = 12;

Area_Head_Left._visible = false; // 注释2

Area_Head_Right._visible = false;

Area_Arm_Left._visible = false;

Area_Arm_Right._visible = false;

Area_Leg_Left._visible = false;

Area_Leg_Right._visible = false;

cursor_old_x = 0.0; // 注释3

cursor_old_y = 0.0;

cursor_new_x = 0.0;

cursor_new_y = 0.0;

cursor_velocity = 0.0;

HitArea = "";

divide_num = 1;

xpoint_array = new Array();

ypoint_array = new Array();

init = false;

function CalVelocity() { // 注释4

cursor_old_x = cursor_new_x;

cursor_old_y = cursor_new_y;

cursor_new_x = int(this._xmouse);

cursor_new_y = int(this._ymouse);

cursor_velocity = int(Math.sqrt(Math.pow(cursor_new_x-cursor_old_x, 2)+Math.pow(cursor_new_y-cursor_old_y, 2)));

}

function CalPoints() { // 注释5

if (cursor_velocity>VEL_HIT_LIMIT) {

divide_num = DIVIDE_NUM_STRIKE;

} else if (cursor_velocity>VEL_SAL_LIMIT) {

divide_num = DIVIDE_NUM_HIT;

} else {

divide_num = DIVIDE_NUM_SAL;

}

xdivide = (cursor_new_x-cursor_old_x)/divide_num;

ydivide = (cursor_new_y-cursor_old_y)/divide_num;

for (i=0; i

function HitCheck() { // 注释6

for (i=0; icursor_old_x) {

HitArea = "Area_Head_Left";

break;

}

}

} else if (Area_Head_Right.hitTest(xpoint_array[i], ypoint_array[i], true)) {

if (!Area_Head_Right.hitTest(cursor_old_x, cursor_old_y, true)) {

if (xpoint_array[i]cursor_old_x) {

HitArea = "Area_Arm_Left";

break;

}

}

} else if (Area_Arm_Right.hitTest(xpoint_array[i], ypoint_array[i], true)) {

if (!Area_Arm_Right.hitTest(cursor_old_x, cursor_old_y, true)) {

if (xpoint_array[i]cursor_old_x) {

HitArea = "Area_Leg_Left";

break;

}

}

} else if (Area_Leg_Right.hitTest(xpoint_array[i], ypoint_array[i], true)) {

if (!Area_Leg_Right.hitTest(cursor_old_x, cursor_old_y, true)) {

if (xpoint_array[i]

function StartMotion() { // 注释7

_root.Motion_all.gotoAndPlay(togo);

}

onEnterFrame = function () { // 注释8

CalVelocity();

CalPoints();

HitCheck();

if (!init) {

HitArea = "";

init = true;

}

switch (HitArea) {

case "Area_Head_Left" :

if (divide_num == DIVIDE_NUM_SAL) {

togo = "TL_w";

} else if (divide_num == DIVIDE_NUM_HIT) {

togo = "TL_m";

} else if (divide_num == DIVIDE_NUM_STRIKE) {

togo = "TL_s";

}

StartMotion();

HitArea = "";

break;

case "Area_Head_Right" :

if (divide_num == DIVIDE_NUM_SAL) {

togo = "TR_w";

} else if (divide_num == DIVIDE_NUM_HIT) {

togo = "TR_m";

} else if (divide_num == DIVIDE_NUM_STRIKE) {

togo = "TR_s";

}

StartMotion();

HitArea = "";

break;

case "Area_Arm_Left" :

if (divide_num == DIVIDE_NUM_SAL) {

togo = "ML_w";

} else if (divide_num == DIVIDE_NUM_HIT) {

togo = "ML_s";

} else if (divide_num == DIVIDE_NUM_STRIKE) {

togo = "ML_s";

}

StartMotion();

HitArea = "";

break;

case "Area_Arm_Right" :

if (divide_num == DIVIDE_NUM_SAL) {

togo = "MR_w";

} else if (divide_num == DIVIDE_NUM_HIT) {

togo = "MR_s";

} else if (divide_num == DIVIDE_NUM_STRIKE) {

togo = "MR_s";

}

StartMotion();

HitArea = "";

break;

case "Area_Leg_Left" :

if (divide_num == DIVIDE_NUM_SAL) {

togo = "BL_w";

} else if (divide_num == DIVIDE_NUM_HIT) {

togo = "B_m";

} else if (divide_num == DIVIDE_NUM_STRIKE) {

togo = "BL_s";

}

StartMotion();

HitArea = "";

break;

case "Area_Leg_Right" :

if (divide_num == DIVIDE_NUM_SAL) {

togo = "BR_w";

} else if (divide_num == DIVIDE_NUM_HIT) {

togo = "B_m";

} else if (divide_num == DIVIDE_NUM_STRIKE) {

togo = "BR_s";

}

StartMotion();

HitArea = "";

break;

}

}

注释1:定义一些变量,分别用来判断鼠标是否以比较慢、中等、比较快的速度划过对象。

注释2:隐藏用来捕捉鼠标动作的对象。

注释3:初始化鼠标的参数。

注释4:这个函数是用来捕捉鼠标划过的速度和划过的位置。

注释5:这个函数是用来判断鼠标划过地速度,分别为强、中、弱。

注释6:这个函数是判断鼠标划过的位置,分别对应场景中的对象的头、手、脚。

注释7:在这个函数中,播放鼠标动作所触发的相应场景。

注释8:这是整个场景的启动函数,不断的循环,不断地对鼠标动作产生响应。

三、小结

总的来说,就是让场景中的对象响应鼠标动作,相应的鼠标动作触发播放相应的Movie Clip。其中Movie Clip的制作好坏,对整体效果的影响是很大的,值得用心去做好Movie Clip。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有