以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
- 以Maya为引擎的小游戏:是男Yin就坚持2K帧
- Java小游戏——是男人就坚持20秒
- libevent是如何与具体事件引擎进行结合的--以select为例
- 是男人就坚持30秒
- 你说以0.4k/s的速度下载什么东西你会坚持下载完
- 坚持自己的坚持,以不二的姿态坚持到底
- 开张,以宅男的名义
- IT理工宅男的目标与坚持
- 是男人就坚持20秒 java的swing弹弹球GAME
- 有些人之所以不断成长,就绝对是有一种坚持下去的力量。
- 长跑是有到达之日的,不喜欢失败,就坚持到终点
- 飞机躲避小游戏---是男人就撑100秒的源代码分析
- 英雄就下100层是一款经典的手机小游戏
- hdu 4908 以k为中位数的子序列计数
- 来看看HGE引擎开发的小游戏2 - 俄罗斯方块
- 4 以沟通为中心,坚持简明清晰的表达方式和开明的领导风格
- 以沟通为中心,坚持简明清晰的表达方式和开明的领导风格
- 2015华为Word Maze 是一个网络小游戏,你需要找到以字母标注的食物
- c++封装机制
- 【IT动态】 手提电脑与双腿的间隔物 - Logitech Speaker Lapdesk N550 香港
- MMC/SD驱动(1)
- Windows Installer服务不能访问
- ListViewWebPart query issue while paging
- 以Maya为引擎的小游戏:是男Yin就坚持2K帧
- 封装机制
- TALKEE视频互动平台
- 图书馆的响声
- 后PC时代中国半导体厂商的机会
- 关于equals和hashCode
- java通信协议初步解析
- 在卸载或者升级VS2008的时候,遇到“加载安装组件时遇到问题,取消安装”
- Nutch