以Maya为引擎的小游戏:是男Yin就坚持2K帧

来源:互联网 发布:js改变border color 编辑:程序博客网 时间:2024/05/01 19:24

视频:http://v.youku.com/v_show/id_XMjI3OTE4MTQw.html

 

 

 


Maya里跑的游戏最著名的可能算是那个俄罗斯方块,也正是那个让我惊讶原来Maya的表达式和mel可以这么用。以前有一个变态小游戏《是男人就坚持20秒》,是小日本的,原名是“特训”还是什么,可能大部分人都玩过,我最多玩到16秒 - -

周日下午开始动工,晚上差不多最核心的完成了。今晚完善了完善,基本已经达到我所有要求了。现在共享一下其中用到的技术知识,以及场景。

 

游戏介绍

这个Maya小游戏使用键盘方向键操作,配合场景自带的窗口进行“开始游戏”“重玩”等命令,益智休闲强身健体,乃茶余饭后消遣必备。

游戏会每隔一段时间自动提升难度:

  • 菜鸟阶段,最温和的阶段。
  • 热手阶段,和你玩耍的炮弹从55发增加到80发,空间资源开始紧张。
  • 大跃进阶段,炮弹提速30%,你的小飞机维持原速。
  • 性别鉴定阶段,炮弹体积膨胀5倍,虽然膨胀前的小不点撞上一次就同样会挂,但是膨胀后你本来可以躲过去的空隙有可能就会变得非常困难,从此点开始,真正考验你是不是男人的阶段来了

炮弹往往会朝着可能击中你的方向发射,所以不要企图找到一个死角然后蹲守,那样不但躲不过飞来的敌人,而且可能会被边缘发射的炮弹直接击中。

 

 

制作

所有的代码都是Maya Expression和Script Node形式的。所以能保证场景可以独立直接打开。

以下是制作要点:

 

1.键盘互动

有同学问到如何使用键盘来控制小飞机,这也是我首先测试的,因为这个如果控制不流畅那就没做的必要了。。

 

首先修改键盘方向快捷键的相应命令,让按下某个方向键时相应的一个状态标记变量为True,释放按键时还原为False。然后使用表达式每帧都根据四个方向键的状态来对小飞机的旋转、位移进行操作。为了方便恢复Maya自身的方向键命令,单独写一个函数自动恢复。

 

以下是实现代码:

(写这篇日志时才发现上面的还原函数里忘了还原releaseName了不好意思,需要每个hotkey添加[-rn ""])

 

以上代码可以放到一个scriptNode里,并把执行事件设为Open/Close。这样每当打开这个场景就会自动加载需要的这些函数。

 

然后建立个表达式,在表达式里输入控制代码

 

开头用了一个exists检测,是因为避免表达式在scriptNode之前执行的情况。

然后下面是一串的if else if。。。用来判断用户的按键状态。很烦琐但是理解起来并不是很难。因为表达式每帧都要执行的,所以只要“游戏”处于播放状态那会一直循环检测。如果谁有更好的方法欢迎告诉我!

里面的常熟大都没有直接用数字而是用的全局变量,目的相信大家也都知道,是为了方便修改。比如要移动小飞机,直接引入一个常数来做速度加入到表达式里当然可以,但是一旦后来发现飞机需要再快一点那就需要把所有速度出现的地方都修改的大一点。而如果用全局变量替代不但修改方便,可读性也更好。

所有常数在一个函数里初始化

 

2.发射炮弹

发射炮弹只需要确定两个问题:1.炮从哪打,2炮往哪开。

 

因为炮弹出发的位置可能位于4条边上,所以用了两个随机数来判断哪条边的哪个位置。

 

随机发射炮弹是非常没挑战性的,于是用到了简单的几何和物理知识,只朝着小飞机和炮弹可能同时到达的位置发射。因为用户一般不会让小飞机一直朝一个方向移动,所以朝能同时到达的最远距离开炮也是一般来说打不中的。因此下面的代码里小飞机的时间乘上了个常数,用来让发射的朝向更趋近于小飞机的位置。

 

 

 

 

这个shoot函数怎么使用就很容易了。详细可以看场景文件。

 

3.击中检测

炮弹和飞机都没问题了之后,再处理炮弹和飞机的碰撞。

一味的自己写表达式也没问题,不过这样不管是制作还是执行都效率太低。于是我们可以使用粒子的碰撞事件来完成。

 

 

 

这三步就是这个游戏的最主要的部分,至于其他的,比如爆炸,成绩等都是枝枝叶叶了,详细请见场景文件。如果有问题可以留言或发邮件给我。

 

以下是场景文件链接,解压密码cuckon,文件是2009保存的mb格式。用到了n粒子所以只能2009往后的版本打开。2011没测试过不过应该没问题。

 

http://hotfile.com/dl/87562184/dd548d5/training_V6.2.rar.html

原创粉丝点击