baidu

[XNA]用XNA画动画

  大家都知道,动画其实是不动的,只是连续的放,人才会感觉是连贯起来的,每秒钟画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),有知道为什么的同学说一声

posted @ 2010-07-29 08:52  egmkang  阅读(2319)  评论(14编辑  收藏  举报