游戏开发之人物动画的切换
以下完全是自己的想的,所以有错的话请指正(*^__^*)
【人物动画的显示原理】
这个先不讲了,网上很多这样的教程,就我目前了解的大概是两种方式,一种是动作都在一张图上,采用矩形定位的方式,通过不断改变矩形的位置可以显示出不同的动画,另外一种是文件方式,该文件保存了很多图,在用的时候将这个文件一次性加载到内存中,然后通过不断读取里面图片的方式呈现出动画效果,我更倾向于后者,不用拼图,O(∩_∩)O哈哈。
【动画的切换】
在实际的游戏中,游戏人物不单单只有行走的动作,还有跳跃、攻击等等,这些都需要通过动画来体现,如果还是采用一个纹理对象加载一个动画文件的话就会显得代码很臃肿,占用的内存也会很客观,毕竟有些动画只有特定的时候才显示出来,比如华丽丽的必杀技~~~
这里先不考虑到线程问题,因为我不会用......所以就想到了其他方法。
怎么办才好呢?这时应该想到update模块,从我在XNA中学到的,游戏的架构应该有Init模块(用来初始化对象和变量),LoadContent模块(用来加载纹理文件或者声音文件等),Update模块(用来更新其他对象的逻辑实现,比如行走功能、卷屏功能等),Draw模块(用来绘制对象),UnLoad模块(用来释放资源)
此时有逻辑:
init模块
↓
LoadContent模块
↓
loop{
Update模块
↓
draw模块
}until exit
↓
UnLoad模块
↓
退出程序
因为update\draw模块是循环的,相当于处于windows程序的消息循环部分。所以我们需要不断修改动画文件的地址。
例如原来有
texture=LoadTextureFromFile("walk.png")。
现在要执行attack功能,这时就要有:
伪代码:
if(press(攻击键))
{
//重现加载为攻击动画的精灵图
texture=LoadTextureFromFile("attack.png");
//显示攻击动作的动画
animatio(texture);
//执行完一遍后应该切换回一般动画
texture=LoadTextureFromFile("walk.png");
}
其实以上还没有用代码实现,因为没有相应的攻击动画的精灵图,所以只能用伪代码实现。
//
//