zoukankan      html  css  js  c++  java
  • [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),有知道为什么的同学说一声

  • 相关阅读:
    [swustoj 411] 售货员的难题
    白书P61
    白书P60
    [ZOJ 3471] Most Powerful
    [HDU 3001] Travelling
    [转] acmer必看的26个对acm态度
    [HDU 1254] 推箱子
    [POJ 3311] Hie with the Pie
    [POJ 3254] Corn Fields
    power
  • 原文地址:https://www.cnblogs.com/egmkang/p/1787543.html
Copyright © 2011-2022 走看看