您的位置:首页 > 其它

MC新手入门(四十三)------ 愤怒小狗制作四

2013-05-16 15:28 218 查看
添加游戏全局脚本

1. 点脚本,全局代码,在弹出的对话框中



图7-5-1



图7-5-2

在空白处写如下代码:

void MoveHorizon();

void UpClick(int a);

void jumpChangeAnimation();

/*****************************************************************************

创建MoveHorizon方法用来判断小狗是否在50的水平线上。

当在水平线上方,让小狗的y轴速度加1的向下掉

当在水平线下面时,让小狗y轴速度为-1的向上移动。

当在水平线上,就小狗y轴速度为0.

当小狗在水平线上或下方,则让i_MouseDown变量为0。为0时可以点击area_DownClick区域

i_MouseDown:鼠标状态

*****************************************************************************/

void MoveHorizon();

void UpClick(int a);

void MoveHorizon()

{

if(player_dog.y <= 50)

{

player_dog.yvelocity += 1;

}

else

{

player_dog.yvelocity = 0;

if(player_dog.y > 50)

{

player_dog.yvelocity = -1;

}

else

{

player_dog.yvelocity = 0;

}

i_MouseDown = 0;

}

}

/*******************************************************************************

创建UpClick方法

调用时给小狗传入向上的速度a。

*******************************************************************************/

void UpClick(int a)

{

if(i_MouseDown < 2)

{

player_dog.yvelocity = a;

i_MouseDown += 1;

}

}

/***********************************************************************

创建jumpChangeAnimation方法

在跳跃时在满足条件后改变动画

***********************************************************************/

void jumpChangeAnimation()

{

if(actPlayerDog.yvelocity == -2 && actPlayerDog.yscreen <150)

{

ChangeAnimation("actPlayerDog", "dogJumpTwo", FORWARD);

}

else if(actPlayerDog.yvelocity >=12 && actPlayerDog.yscreen >170 && i_CollisionChange == 0)

{

ChangeAnimation("actPlayerDog", "animDogRun", FORWARD);

DoubleXVelocity(-8.0, -1.0, 0.0);

}

}

写好后保存脚本。弹出如下界面。输入脚本名“YVelocity”->确定



图7-5-3

以相同的方式新建脚本“XVelocity”,在代码编辑区域里输入代码:

void DoubleXVelocity(double bg, double dog, double cat);

void remoraXVelocity(double a);

void DoubleXVelocity(double a, double b, double c);// 设置背景、小狗、猫在水平方向上的速率,使画面在X方向上动起来。

{

actBgLevelOne.xvelocity = bg; // XVelocity:角色的像素/帧在水平方向上的速率

actBgLevelTwo.xvelocity = bg;

actBgLevelThree.xvelocity = bg;

actPlayerDog.xvelocity = dog;

actPlayerCat.xvelocity = cat;

}

void remoraXVelocity(double a) // 设置障碍物在水平方向上的速率,使画面在X方向上动起来。

{

actPlayRemOneP.xvelocity = a;

actPlayRemOneP2.xvelocity = a;

tPlayRemOneP3.xvelocity = a;

actPlayRemTwo1.xvelocity = a;

actPropBoneP.xvelocity = a;

actPlayRemTwo.xvelocity = a;

actPlayRemThree.xvelocity = a;

actPlayRemTree1.xvelocity = a;

actPlayRemTree2.xvelocity = a;

}

2. 为角色添加事件及行为。

右击“area_UpClick” 角色,在角色面板里面 点“添加事件”的下拉列表。



图7-5-4

点“添加事件”按钮。如下图设置



图7-5-5

点“确定”。在代码区域内写入如下代码:

UpClick(-16);

DoubleXVelocity(5.0, 5.0, 5.0);

以相同的方式添加area_UpClick角色的Mouse Button Up 事件的Script Editor行为。

如下图:



图7-5-6

在空白编辑区里面写入代码:

DoubleXVelocity(7.0, 6.0, 7.0);

然后,保存并退出就完成了“area_UpClick” 角色的行为编写。

接下来我们为“area_FrontClick”角色的鼠标键按下事件的脚本编辑器行为。添加如下代码:

DoubleXVelocity(7.0, 8.0, 7.0);

为“area_FrontClick” 角色的鼠标键弹起事件的脚本编辑器行为。添加如下代码:

DoubleXVelocity(7.0, 6.0, 7.0);

最后来添加“area_DownClick” 角色的鼠标键按下事件的改变动画行为。如下图:



图7-5-7

为“area_DownClick”角色添加。在Mouse Button Up 事件里添加Change Animation 行为。改变动画的名称为dog_squatTwo.如下图:



图7-5-8

在全局脚本里面创建第一个关卡中的角色:

创建一个命名为:CA_createActor在代码区域写入以下代码。

void CALevelOne();

void CARemoraOne();

void CALevelTwo();

void CARemoraTwo();

void CALevelThree();

void CARemoraThree();

/*******************************************************************************

创建一个方法用来创建第一个关卡中的角色

*******************************************************************************/

void CALevelOne()

{

CreateActor("actBgLevelOne", "animBgLevelOne", "", "", 1760, 0, true);

CreateActor("actPlayerDog", "animDogRun", "", "", -70, 50, true);

CreateActor("actPlayerCat", "animCatRun", "", "", 200, 50, true);

CreateActor("actStartTime", "animCountTime", "", "", 0, 0, true);

}

void CARemoraOne()

{

CreateActor("actPlayRemOneP", "animRock", "", "", -300, 70, true);

CreateActor("actPlayRemOne", "animRock", "actPlayRemOneP", "", 600, 0, true);

CreateActor("actPlayRemOne", "animRock", "actPlayRemOneP", "", 1450, 0, true);

CreateActor("actPlayRemOne", "animRock", "actPlayRemOneP", "", 1500, 0, true);

CreateActor("actPlayRemOne", "animRock", "actPlayRemOneP", "", 2000, 0, true);

CreateActor("actPlayRemTwo1", "animBadDog", "", "", 700, 55, true);

CreateActor("actPropBoneP", "animBone", "", "", -300, -20, true);

CreateActor("actPropBone", "animBone", "actPropBoneP", "", 1000, -20, true);

CreateActor("actPropBone", "animBone", "actPropBoneP", "", 1700, -20, true);

CreateActor("actPropBone", "animBone", "actPropBoneP", "", 2000, -20, true);

}

/************************************************************

创建一个方法用来创建第二个关卡中的角色

************************************************************/

void CALevelTwo()

{

CreateActor("actBgLevelTwo", "animBgLevelTwo", "", "", 1760, 0, true);

CreateActor("actPlayerDog", "animDogRun", "", "", -70, 50, true);

CreateActor("actPlayerCat", "animCatRun", "", "", 200, 50, true);

CreateActor("actStartTime", "animCountTime", "", "", 0, 0, true);

}

void CARemoraTwo()

{

CreateActor("actPlayRemOneP2", "animMow", "", "", -300, 60, true);

CreateActor("actPlayRemOne2", "animMow", "actPlayRemOneP2", "", 600, 0, true);

CreateActor("actPlayRemOne2", "animMow", "actPlayRemOneP2", "", 650, 0, true);

CreateActor("actPlayRemOne2", "animMow", "actPlayRemOneP2", "", 2000, 0, true);

CreateActor("actPlayRemOne2", "animMow", "actPlayRemOneP2", "", 2500, 0, true);

CreateActor("actPlayRemOne2", "animMow", "actPlayRemOneP2", "", 2850, 0, true);

CreateActor("actPlayRemOne2", "animMow", "actPlayRemOneP2", "", 3000, 0, true);

CreateActor("actPlayRemOne2", "animMow", "actPlayRemOneP2", "", 3500, 0, true);

CreateActor("actPlayRemOne2", "animMow", "actPlayRemOneP2", "", 3550, 0, true)

CreateActor("actPropBoneP", "animBone", "", "", -300, -20, true);

CreateActor("actPropBone", "animBone", "actPropBoneP", "", 1300, -20, true);

CreateActor("actPropBone", "animBone", "actPropBoneP", "", 1900, -20, true);

CreateActor("actPropBone", "animBone", "actPropBoneP", "", 2500, -20, true);

CreateActor("actPlayRemTree1", "animTreeHole", "", "", 700, 60, true);

CreateActor("actPlayRemTree2", "animTreeTrunk", "", "", 778, -5, true);

}

/***********************************************************

创建一个方法用来创建第三个关卡中的角色

************************************************************/

void CALevelThree()

{

CreateActor("actBgLevelThree", "animBgLevelThree", "", "", 1760, 0, true);

CreateActor("actPlayerDog", "animDogRun", "", "", -70, 50, true);

CreateActor("actPlayerCat", "animCatRun", "", "", 200, 50, true);

CreateActor("actStartTime", "animCountTime", "", "", 0, 0, true);

}

void CARemoraThree()

{

CreateActor("actPlayRemOneP3", "animGarbagecan", "", "", -300, 70, true);

CreateActor("actPlayRemOne3", "animGarbagecan", "actPlayRemOneP3", "", 600, 0,
true);

CreateActor("actPlayRemOne3", "animGarbagecan", "actPlayRemOneP3", "", 1450, 0,
true);

CreateActor("actPlayRemOne3", "animGarbagecan", "actPlayRemOneP3", "", 1500, 0,
true);

CreateActor("actPlayRemOne3", "animGarbagecan", "actPlayRemOneP3", "", 2000, 0,
true);

CreateActor("actPropBoneP", "animBone", "", "", -300, -20, true);

CreateActor("actPropBone", "animBone", "actPropBoneP", "", 1000, -20, true);

CreateActor("actPropBone", "animBone", "actPropBoneP", "", 1700, -20, true);

CreateActor("actPropBone", "animBone", "actPropBoneP", "", 2000, -20, true);

CreateActor("actPlayRemThree", "animHydrant", "", "", 2200, 20, true);

CreateActor("actPlayRemTwo", "animDustbin", "", "", 700, 55, true);

}

在全局代码中创建命名为:DA_destroyactor.在代码区域写入以下代码。删除创建的角色。

void DestroyLevelOne();

void DestroyLevelTwo();

void DestroyLevelThree();

void DestroyLevelOne()

{

DestroyActor("actBgLevelOne");

DestroyActor("actPlayerDog");

DestroyActor("actPlayerCat");

DestroyActor("actHintBone");

DestroyActor("actPlayRemOneP");

DestroyActor("actPlayRemOne");

DestroyActor("actPlayRemTwo1");

DestroyActor("actPropBoneP");

DestroyActor("actPropBone");

}

void DestroyLevelTwo()

{

DestroyActor("actBgLevelTwo");

DestroyActor("actPlayerDog");

DestroyActor("actPlayerCat");

DestroyActor("actHintBone");

DestroyActor("actPlayRemOneP2");

DestroyActor("actPlayRemOne2");

DestroyActor("actPropBoneP");

DestroyActor("actPropBone");

DestroyActor("actPlayRemTree1");

DestroyActor("actPlayRemTree2");

}

void DestroyLevelThree()

{

DestroyActor("actBgLevelThree");

DestroyActor("actPlayerDog");

DestroyActor("actPlayerCat");

DestroyActor("actHintBone");

DestroyActor("actPlayRemOneP3");

DestroyActor("actPlayRemOne3");

DestroyActor("actPlayRemThree");

DestroyActor("actPropBoneP");

DestroyActor("actPropBone");

}

调用第一关卡:

在AP_LevelNumber角色中,添加“Create Actor”,“Mouse Button Down”,“MouseButton Up”三个事件,

1.“Create Actor”的Script Editor行为中,添加代码使动画帧不会自动播放

代码如下:

ChangeAnimationDirection("Event Actor", STOPPED); //动画停止

animpos = 0; //在第0帧

2.“Mouse Button Down”的Script Editor行为中,添加代码使动画帧在鼠标按下时换成第1帧。

代码如下:

animpos = 1; //在第1帧

3.“MouseButton Up”的Script Editor行为中,添加代码调用第一关的函数。

代码如下:

animpos = 0; //转为第0帧

DestroyLevelFrame();//删除本面的角色

CALevelOne();//调用第一关的代码

在这里就将第一关卡,完成了。现在可以测试一下。

添加背景图片:

点角色控件里的角色为工程添加一个“actBgLevelOne”角色,在属性列表里,改变属性名称。在动画设置里面添加“animBgLevelOne”图片作为背景图片。

1) 添加“Create Actor”事件,在“Script Editor”中添加如下代码:

i_level = 1;

CreateActor("actHintBone", "animHintBone", "", "", 0, -140, true);

2) 添加“Draw Actor”事件,在“Script Editor”中添加如下代码:

if(actPlayerCat.x - actPlayerDog.x <= 100 && catExist == 0 && i_MouseFront ==0)

{

DoubleXVelocity(-9.0, 0.0, 0.0);

}

if(actBgLevelOne.xscreen <= -2000)

{

CreatepassFrame();

DestroyLevelOne();

}

第二关关卡:

添加背景图片:

点角色控件里的角色为工程添加一个“bg_levelTwo”角色,在属性列表里,改变属性名称。在动画设置里面添加“AD_bg_levelTwo”图片作为背景图片。

1)添加“Create Actor”事件,在“Script Editor”中添加如下代码:

i_level = 2;

CreateActor("hint_bone", "hintbone", "", "", 0, -140, true);

2) 添加“Draw Actor”事件,在“Script Editor”中添加如下代码:

if(player_cat.x - player_dog.x <= 100 && catExist == 0 && i_MouseFront ==0)

{

DoubleXVelocity(-9.0, 0.0, 0.0);

}

if(bg_levelTwo.xscreen <= -2000)

{

CreatepassFrame();

DestroyLevelTwo();

}

调用第二关卡:

在AP_LevelNumber2角色中,添加“Create Actor”,“Mouse Button Down”,“MouseButton Up”三个事件,

1)“Create Actor”的Script Editor行为中,添加代码使动画帧不会自动播放代码如下:

ChangeAnimationDirection("Event Actor", STOPPED); //动画停止

animpos = 0; //在第0帧

2)“Mouse Button Down”的Script Editor行为中,添加代码使动画帧在鼠标按下时换成第1帧,代码如下:

animpos = 1; //在第1帧

3)“MouseButton Up”的Script Editor行为中,添加代码调用第一关的函数,代码如下:

animpos = 0; //转为第0帧

DestroyLevelFrame();//删除本面的角色

CALevelTwo();//调用第一关的代码

在这里就将第二关卡,完成了。现在可以测试一下。

第三关关卡:

添加背景图片:

点角色控件里的角色为工程添加一个“bg_levelThree”角色,在属性列表里,改变属性名称。在动画设置里面添加“AD_bg_levelThree”图片作为背景图片。

(1)添加“Create Actor”事件,在“Script Editor”中添加如下代码:

i_level = 3;

CreateActor("hint_bone", "hintbone", "", "", 0, -140, true);

(2)添加“Draw Actor”事件,在“Script Editor”中添加如下代码:

if(player_cat.x - player_dog.x <= 100 && catExist == 0 && i_MouseFront ==0)

{

DoubleXVelocity(-9.0, 0.0, 0.0);

}

if(bg_levelThree.xscreen <= -2000)

{

CreatepassFrame();

DestroyLevelThree();

}

调用第三关卡:

在AP_LevelNumber3角色中,添加“Create Actor”,“Mouse Button Down”,“MouseButton Up”三个事件,

(1)“Create Actor”的Script Editor行为中,添加代码使动画帧不会自动播放,代码如下:

ChangeAnimationDirection("Event Actor", STOPPED); //动画停止

animpos = 0; //在第0帧

(2)“Mouse Button Down”的Script Editor行为中,添加代码使动画帧在鼠标按下时换成第1帧。代码如下:

animpos = 1; //在第1帧

(3)“MouseButton Up”的Script Editor行为中,添加代码调用第一关的函数,代码如下:

animpos = 0; //转为第0帧

DestroyLevelFrame();//删除本面的角色

CALevelThree();//调用第一关的代码

在这里就将第二关卡,完成了。现在可以测试一下。

Demo下载地址:http://www.dongyo.cn/bbs/forum.php?mod=viewthread&tid=2518&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: