大家都知道,动画其实是不动的,只是连续的放,人才会感觉是连贯起来的,每秒钟画24幅图片以上,人眼就很难分辨了.
在WP项目中,刷新率被限制到了30帧,相比PC平台是低,但是在手持设备上,已经算是很高了.以前用GDI在WM上面画,如果没有Alpha通道还好,如果有Alpha通道,用AlphaBlend,怎么也不会快,尤其是全屏的画,10帧的速率都是一个梦想(这个一点也不夸张).XNA背后有显卡加速(有老大撑腰),自然快了不少,在PC上面看XNA的Demo,基本上都不怎么耗CPU的.
OK,言归正传.要想画动画,自然要准备多张图片,然后一幅一幅的画上去,就行了.
如果只是画画的话,基本上对XNA可以不必深究,就可以做出来东西.Game类是核心,在LoadContent里面去加载纹理,材质之类的(当然UnloadContent里面卸载这些),剩下的就只需要关心Update和Draw了.
Draw是名符其实的画,Update用来更新状态.一般在Update里面都会计算经过了多少时间,计算物体碰撞,还有就是输入的检测.
OK来看看我的这个动画,很简陋,不要笑:-)
List<Texture2D> person; Texture2DdrawTexture = null;
一个person的List是一串动作的纹理,drawTexture是需要被画出来的纹理.
在LoadContent里面加载纹理:
for(int i = 0; i < 4; i++ ) person.Add(this.Content.Load<Texture2D>(i.ToString()));
然后在Update里面计算该画哪幅图片了:
drawTexture = person[index / 15 %person.Count]; index++;
最后在Draw里面画出来:
spriteBatch.Begin(); spriteBatch.Draw(drawTexture, new Vector2(0, 0),Color.White); spriteBatch.End();
整个过程非常简单,如果你看过我上篇文章的话,用XNA做出来一个2D的游戏应该不会是什么难事,剩下的都是点子和工作量了.
我自己不是美工,网上找到几个图片,凑合着用:-)
这个是效果图:
这里是源代码:
https://files.cnblogs.com/egmkang/Animation.zip
PS:
还发现了一个问题,在PC上,刷新率设置成60帧,反而比75帧的消耗还要大(我是通过CPU占有率看的J),有知道为什么的同学说一声