MC新手入门(十二)------ 色彩色调

时间:2024-03-08 18:54:02

 在很多游戏场景角色中,通常有控制角色颜色的现象,比如我们经常能看到这样一种情况,在坦克大战、魂斗罗还有超级玛丽等游戏中,当战斗者被打死时候,战斗者会变色,也就是提示玩家Game Over。

控制角色颜色函数

    在MC中通过adjustHsv()函数来控制角色颜色。这个函数原理是使用HSV颜色模型,HSV色彩属性模式是根据色彩的三个基本属性:色相、饱和度和明度来确定颜色的一种方法。

函数原型如下:

void adjustHsv(const char *actorName,const char *aniName, double h, double s, double v);

说明:   

      actorName:角色名

      aniName:动画名

      h:色相是色彩的基本属性,就是平常所说的颜色名 称,如红色、黄色等。

      s:饱和度是指色彩的纯度,越高色彩越纯,低则逐渐变灰。

      v:明度也叫““亮度”。

实例运用  

使用场景:在游戏中,我们经常能看到这样一种情况,在超级玛丽等游戏中,当超级玛丽被打死时候,超级玛丽会变色,也就是提示玩家Game Over。

目标:超级玛丽在移动过程中碰到乌龟时变色,接着超级玛丽消除。

实例:超级玛丽碰到乌龟时变色。

3-8-4-2-1.png

图3-4-8-2-1

走过去碰撞如下所示:

3-8-4-2-2.png

图3-4-8-2-2

首先我们将目标转换成逻辑描述:

游戏运行时,做下面的事情:

           创建界面角色;

           添加超级玛丽行走功能;

           实现碰撞变色功能;

           直到结束。

 

接着我们开始用MC来实现上述的逻辑:

1. 界面设计

通过前面学习,界面设计在这里就不多说了,其中玛丽角色名为actMario,乌龟角色名为actEnemy,结果如下所示:

3-8-4-2-3.png 

图3-4-8-2-3

2. 添加超级玛丽行走功能

通过右方向键来控制向右行走,实现当一直按着右方向键时,玛丽一直往右行走,当弹起时,停止不动。如下步骤:

在actMario角色中添加“键盘按键按下”事件,按键右方向键,执行“改变动画”,选择animMarioMoveRight动画,如所示:

3-8-4-2-4.png 

图3-4-8-2-4

在actMario角色中添加“键盘按键按下”事件,按键right,执行脚本编辑,如下所示:

3-8-4-2-5.png 

图3-4-8-2-5

在actMario角色中选择动画animMarioMoveRight,添加Key Up事件,按键right,执行改变动作,选择animMarioStopRight动画,

3-8-4-2-6.png 

图3-4-8-2-6

     通过左方向键来控制向左行走,实现当一直按着左方向键时,玛丽一直往左行走,当弹起时,停止不动。如下步骤:

在actMario角色中选择停止站住状态动画marioStopleft,添加“键盘按键按下”事件,按键left(键盘上的“左方向键”),执行改变动作,选择marioMoveLeft动画,如所示:

3-8-4-2-7.png 

图3-4-8-2-7

在actMario角色中选择停止站住状态动画marioStopleft,添加“键盘按键按下”事件,按键left,执行脚本编辑,如下所示:

3-8-4-2-8.png 

图3-4-8-2-8

在actMario角色中添加“按键弹起”事件,按键left,执行改变动作,选择marioStopleft动画,如下所示:

3-8-4-2-9.png

图3-4-8-2-9

3. 实现碰撞变色功能

角色actMario跟乌龟碰撞有可能是停止碰撞或者移动碰撞,实现步骤如下:

在actMario角色中添加“物体碰撞”事件,执行添加编写脚本,如所示:

3-8-4-2-10.png

图3-4-8-2-10

脚本代码如下:

adjustHsv("actMario","animMarioStopRight", 0.5, 0.8, 0.3); //色调改变

添加一个计时器:

3-8-4-2-11.png

图3-4-8-2-11

再添加“物体碰撞”事件,执行“创建计时器”行为,

3-8-4-2-12.png

图3-4-8-2-12

接下来添加“使用计时器”事件。执行“删除角色”,如下所示:

3-8-4-2-13.png

图3-4-8-2-13

Demo下载地址:http://www.dongyo.cn/bbs/forum.php?mod=viewthread&tid=2441&extra=page%3D3%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline