SDL游戏之路(九)--动画制作
2014-01-15 22:11
309 查看
动画制作
游戏动画如何制作呢?
我的理解就是,动画就是一幅幅图片不断替换就形成了动画。
当然,每一副图片要显示一段时间。
所有定义一个动画的实现类,代码如下:
实现如下:
使用示例:
运行效果:
游戏动画如何制作呢?
我的理解就是,动画就是一幅幅图片不断替换就形成了动画。
当然,每一副图片要显示一段时间。
所有定义一个动画的实现类,代码如下:
#ifndef SKANIMATION_H_ #define SKANIMATION_H_ #include "SkComm.h" #include "SkImage.h" #include <vector> using namespace std; namespace sk_park { class SkAnimation { public: SkAnimation(); //获取对应时刻点应该绘制的图片 SkSurface * getShow(Sint64 iMSecTime); //设置动画开始播放的时间点,动画从此时间点后会循环播放 void setBeginTime(Sint64 iBeginMSec); //添加动画图片,按照顺序添加每一幅图片,并指定该图片显示的毫秒数 void addPic(SkSurface & stPic, Sint32 iMSec); //清除动画内容 void clear(); //动画的位置信息,只作为成员属性,动画绘制的位置需要在绘制时候指定 Sint32 m_iPosX; Sint32 m_iPosY; //动画大小,只作为成员属性,动画绘制的大小需要在m_vctPic中指定 Sint32 m_iWidth; Sint32 m_iHeight; //绘制的图片 vector<SkSurface> m_vctPic; //绘制图片的时长 vector<Sint32> m_vctMSec; //动画开始时间 Sint64 m_iBeginMSec; //动画总时长 Sint32 m_iTotalMSec; }; } extern sk_park::SkAnimation g_SkAnimation; #endif /* SKANIMATION_H_ */
实现如下:
#include "pch.h" #include "SkAnimation.h" using namespace sk_park; SkAnimation::SkAnimation() { m_iBeginMSec = 0; m_iPosX = 0; m_iPosY = 0; m_iTotalMSec = 0; } void SkAnimation::setBeginTime(Sint64 iBeginMSec) { m_iBeginMSec = iBeginMSec; } SkSurface * SkAnimation::getShow(Sint64 iMSecTime) { if (m_iBeginMSec == 0) { m_iBeginMSec = iMSecTime; } Sint32 iMSec = iMSecTime - m_iBeginMSec; if (iMSec < 0) { iMSec = 0; } if (m_iTotalMSec <= 0) { return NULL; } Sint32 iMSecTmp = iMSec % m_iTotalMSec; Sint32 iTmp = 0; for (int i = 0; i < (int) m_vctMSec.size(); i++) { iTmp += m_vctMSec.at(i); if (iTmp >= iMSecTmp) { return &(m_vctPic.at(i)); } } return NULL; } void SkAnimation::addPic(SkSurface & stPic, Sint32 iMSec) { if (iMSec > 0) { m_iTotalMSec += iMSec; m_vctMSec.push_back(iMSec); m_vctPic.push_back(stPic); } } void SkAnimation::clear() { m_vctMSec.clear(); m_vctPic.clear(); m_iTotalMSec = 0; } SkAnimation g_SkAnimation;
使用示例:
{ SkImage image; image.load("pic/p0.png"); m_testAnimation.addPic(image.m_skSurface, 100); } { SkImage image; image.load("pic/p1.png"); m_testAnimation.addPic(image.m_skSurface, 100); } { SkImage image; image.load("pic/p2.png"); m_testAnimation.addPic(image.m_skSurface, 100); } { SkImage image; image.load("pic/p3.png"); m_testAnimation.addPic(image.m_skSurface, 100); } m_testAnimation.setBeginTime(g_SkGameTimer.m_siGameLastTime);
运行效果:
相关文章推荐
- hrbust 1997 又是一个神奇的布尔矩阵
- vector.size()是usigned
- IT学子成长指导类文章链接(十)
- vector.size()是usigned
- JAVA基础——内部类、匿名内部类
- 快速排序
- 61 Android Service 下载图片保存到Sdcard
- poj1329 Circle Through Three Points
- Ambiguous Permutations
- C语言之详解#ifdef等宏
- OSG 第三讲,OSGviewer加入键盘响应
- hrbust 1996 数学等式
- Java中的String为什么是不可变的? -- String源码分析
- ubuntu下改变用户名
- LearnVSXNow! #10 创建我们第一个工具集-重用代码
- hrbust 1995 伟大的一食堂
- GitHub之.gitignore使用1---Github使用gitignore忽略增加指定文件
- PhoneGap 11 图标和启动画面(Icons and Splash Screens)
- SRP,OCP,依赖倒转,LSP
- UML之概述