很多学游戏的人都会想知道二维动画是怎么出来的呢?现在我就教你们一个简单实用的二维动画算法。
九游会入口首页我们需要定义一个类叫animatedsprite里面初始化的参数有
分别是图片的xyz坐标,xframenumber, yframenumber为图片的框架,比如1*4的框架
然后framedelay, totalframes得出这个图像的帧数framedelay比如为4,接着totalframes算出这图像1*4=4的总体框架, xvelocity, yvelocity接着赋予x,y的速度给这图片,char *texturename这块是选择图片文件路径,int width, int height是赋予图片每个分割出来的图片大小。
接着我们运行一个绘制图片函数
void animatedsprite::draw2()
{
float xstep;
float ystep;
xstep =
ystep =
//// enable z-buffer
glenable(gl_depth_test);
gldepthmask(true);
//// set the general polygon properties
glcolor
glenable(gl_texture_2d);
glblendfunc(gl_src_alpha,gl_one_minus_src_alpha);
glalphafunc(gl_greater,
gldisable(gl_cull_face);
glloadidentity(); // 重置当前的模型观察矩阵
glenable(gl_cull_face);
glcullface (gl_back);
if(ablendflag) glenable(gl_blend);
else gldisable(gl_blend);
if(atestflag) glenable(gl_alpha_test);
else gldisable(gl_alpha_test);
frameindex ++;
currentframeindex = frameindex / framedelay % totalframes;
//if(loop != true) {
// if(frameindex/framedelay >= totalframes )
// alive = false;
//}
//gltranslatef(
glpolygonmode(gl_back, gl_line); // 设置反面为线形模式
glpolygonmode(gl_front, gl_fill); // 设置正面为填充模式
glfrontface(gl_ccw); // 设置ccw方向为“正面”,ccw即counterclockwise,逆时针
//glfrontface(gl_cw); // 设置cw方向为“正面”,cw即clockwise,顺时针
//得出中心点
float tx=width/
float ty=height/
//rotate =
glrotatef(rotate,
//算出框架速度
float yp =(currentframeindex / xframenumber % yframenumber)*ystep;
float ypupper = yp +ystep;
gltranslatef((float) xposition,(float) yposition,
glbindtexture(gl_texture_2d, idtexure); // 选择纹理
glpushmatrix();//算出图片的矢量图
glbegin(gl_quads);
gltexcoord
glvertex3i(((int)-tx), (int) ty,zposition);
gltexcoord
glvertex3i(((int)-tx),(int)-ty,zposition);
gltexcoord
glvertex3i( ((int)tx),(int)-ty,zposition);
gltexcoord
glvertex3i(((int) tx), (int)ty,zposition);
glend();
glpopmatrix();
}
接着我们执行这个函数开始绘制图片并且赋予动态,然后在opengl图像绘制函数调用该函数打工造成,一个完成的动态图就出来了。
整体原理就算把图片分块后,轮播每块图片。
九游会ag的友情链接: