- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SYJ教你制作3D游戏19—22
《SYJ教你制作3D游戏》——第二阶段基础教程第十九节:c_move的移动相对方向以及设置#include的引用路径
相信很多朋友玩过著名恐怖游戏:生化危机
生化危机一代至三代的角色操作方式一向均是按左、右方向键控制角色角度,按上、下方向键控制角色走动。
那么,如果我想给box.mdl也做出这种效果,我们可以通过c_move来实现吗?
答案是可以的。将box_mdl_act动作替换为以下代码:
action box_mdl_act()
{
while(1)
{
if (key_w)
{
c_move (my, vector(10 * time_step, 0, 0), nullvector , GLIDE);
}
if (key_s)
{
c_move (my, vector(-10 * time_step, 0, 0), nullvector, GLIDE);
}
if (key_a)
{
my.pan -= 10 * time_step;
}
if (key_d)
{
my.pan += 10 * time_step;
}
wait(1);
}
}
我们来测试一下,按下键盘上的A、D键,box.mdl旋转起来了!在按下W、S键,哈!它能顺着一定角度运动起来了!
我们来看代码,key_a和key_b条件事件被改动过了,这里就不再解释了。除此之外,以key_w的条件事件为例,原代码
c_move (my, nullvector , vector(10 * time_step, 0, 0),GLIDE);
被替换为了
c_move (my, vector(10 * time_step, 0, 0), nullvector , GLIDE);
也就只是nullvector和vector(10*time_step,0,0)互换了位置。现在,我想,c_move中根据实体角度判断移动向量的强大功能已经被您理解了吧。
现在,我给大家出一道题:取消box.mdl的碰撞检测。也就是说,当box.mdl经过障碍物时能够穿越它。
其实,只要更改一下c_move就可以实现了。替换box_mdl_act动作为以下代码:
action box_mdl_act()
{
while(1)
{
if (key_w)
{
c_move (my, vector(10 * time_step, 0, 0), nullvector , IGNORE_MODELS
);
}
if (key_s)
{
c_move (my, vector(-10 * time_step, 0, 0), nullvector, IGNORE_MODELS
);
}
if (key_a)
{
my.pan -= 10 * time_step;
}
if (key_d)
{
my.pan += 10 * time_step;
}
wait(1);
}
}
现在,恢复c_move的碰撞检测。
不知道大家有没有在碰撞检测的过程中发现一些细节的东西。现在,请把你所操控的box.mdl缩放一下,使它的高度小于桌子腿的高度,然后再做测试,看看能否把box.mdl移动至桌子底下。
也许你会发现,我的猜想不能实现。
为什么会这样呢?
因为,wed把desk.mdl看成了一个只有六个面的立方体,立方体的前、后、左、右四个面即desk.mdl整个模型前、后、左、右的最顶端,理所当然,碰撞检测是以这个六面的立方体为标准的,而不是以desk.mdl的形状为标准的。
那么,我们该如何实现让碰撞检测以模型的形状为标准呢?
非常简单,只要在sence.wmp里在desk.mdl属性中勾选“polygon/多边形”一项,建造关卡,便能实现。
最后,我还得布置给大家一个任务,新建一个脚本文件,命名为Function.c,并且置于game2根路径下,要求:将所有function函数和action动作代码剪切至Function.c,并在main.c中引用Function.c,且能正确执行。
我们之前学过,#include XX一句能够引用3D gstudio安装路径“Gstudio7\include”下的脚本文件,可是,若想在指定的根路径中引用,我们该如何写代码呢?
相信聪明的你已经猜到了,我们之前说过,脚本中所出现双引号”XX.xx”时,则表示引用文件,那么如果我将#include后接的XX改为”XX”不就行了吗?
注意#include “Function.c”的书写位置。
下一节课我们学习用MED制作简单动画。
第十九节教程到此结束。
《SYJ教你制作
文档评论(0)