《游戏编程入门》学习笔记7——实现抽象踢腿动作、引入耐力值

    如何设计整个出腿及检测踢中机制呢?这是个问题。
    做游戏不仅仅是技术,它还是一门艺术。猪哥静下心来慢慢想,可以想到的是最好不要凭空编造这个过程,而应该尽量观察思考真实的人物动作,然后进行简单而又逼真的抽象。

    身体必然以矩形来表示,而要点是脚的位置,一旦脚碰到对方身体,可算击中。为了不要搞得太复杂,暂时忽略脚和腿的碰撞问题。   

    现在已经确定将人物及出腿动作抽象为一矩形以及从矩形右下(或左下)角往前方飞出一个点。那么关键问题就是这个点的运动轨迹如何设定了。

    世界上存在很多种腿法,侧踢、侧踹属最基本的。跆拳道中有种奇怪的踢法,是身体正朝对方,把腿先抬得高高的,然后弹出去用脚掌前端击打对方,这样会不会弄不好就把脚趾给折了?至于什么佛山无影脚啊,鬼脚七啊…我们还是不胡扯了。

    这时猪哥突然想到一种最简单的模拟,说起来倒是取了跆拳道那个击法,就是点首先沿矩形边沿上升至腰部,然后直线前进。

 

    好了,下一个目标出现了,这次题目设计得稍难点,要绘制一个代表身体的矩形和一个代表脚的小矩形,它们可以左右移动,并在按出脚键时身体停止移动,同时脚会按轨迹移动至前方并保持,释放出脚键则随时收回。并引入耐力值,耐力值会随动作减少,静止时当然要恢复,我暂时不绘制耐力条,只用文本打印出数值来。

    各种需要调整的数值可以定义在宏中,这样一旦实现功能,剩下的就是调整数值的轻松活了。

  

    下面开始实际操作。

 

    首先,是时候换掉那个烟花动画了,好歹得自己画个矩形来用才像样。干脆现在一并把透明色等问题实践下吧。直接用画图来编辑bmp文件,设白色为透明色,用黑色刷子刷个小人出来凑合用着先。

    注意在Loadtexture函数参数里面添加进第二个colorkey参数。

    颜色的表示法参考教学代码就知道了。

    原窗口背景色和黑色对比不太鲜明,改为灰色就好多了。

    另外Sprite_Draw_Frame函数的参数也要作相应修改,因为现在一张图里面只剩一帧了。

    最后,小人在移动时存在残影问题,就算帧率调到很低仍然存在,它一点都不炫而且很影响视觉效果,现在先不管以后处理吧,我仿佛记得云风大哥的书《游戏之旅——我的编程感悟》里这些貌似都曾提到过一点,有空去翻翻。

 

    一番折腾之后,终于实现了按A键会有一只脚(现在还只是一个小黑块)上升到腰部然后前进。

    对如何实现持续按键则出脚、放开按键则自动收回的技术问题有些迷惑,起初以为需要进一步研究按键检测的机制,不过很快反应过来,只要在程序上做些处理就解决了。

    修正了一些小问题,对脚的移动速度及活动范围作些限制,再保证按下动作键时人物无法移动,很快目标实现了一大半。

 

    剩下的工作就是引入耐力值了。

    也很简单,定义一个新变量endurance,然后将之前的movespeedfootspeed变量均用宏替换为耐力值除以一个数值就ok啦,当然在每次按键动作后要记得添加减耐力的代码并在无按键时恢复,同时要注意变量的变化范围,不要小于或者超出最大值了。

    有个小细节提下,一开始我是习惯性的把所有参数都设置为unsigned型,其实很没必要,因为这样会带来一个问题,参数降低到零以下后,会突然变成很大的值,这样导致人物退到墙角后,直接出现从屏幕另一头穿出来。直接都设为int型就方便很多。

   

    一旦主体功能完成,添入其他调节机制的活变得比想象中轻松很多。

    至此,今天的目标已经实现。

 

2013.6.4注:

随着开发的深入,很多设定会不得不被改得面目全非。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值