XNA2D入門
今天開始看了一下景軍老大的教程,開始學習XNA,感覺非常不錯,有了教程上手方便多了。
初期先從2D開始,一般2D就涉及以下問題,逐一解決:
1、載入圖片
Texture2D myPic; //定義一個2D對象
myPic = Texture2D.FromFile(graphics.GraphicsDevice, "Airport.png"); //將圖片加入工程即可載入
2、顯示圖片
SpriteBatch myScr;
myScr = new SpriteBatch(graphics.GraphicsDevice); //這句加在 InitializeComponent(); 初始化後
//以下代碼加在 protected override void Draw() 中
myScr.Begin();
myScr.Draw(myPic, new Rectangle(x, y, myPic.Width , myPic.Height), Color.White);
myScr.End();
3、縮放圖片
自由修改顯示圖片代碼中的寬高即可。
4、翻轉圖片
修改顯示圖片代碼中的寬高為負值即可。
5、旋轉圖片
顯示代碼改為:
myScr.Draw(myPic, new Vector2(X, Y), new Rectangle(0, 0, myPic.Width , myPic.Height ), Color.White, 3.14f, new Vector2(myPic.Width/2, myPic.Height/2), 1f, SpriteEffects.None, 0f);
//X,Y為圖片顯示坐標 3.14f為旋轉角度(改值為浮點數,從0-2pi為一週,3.14即為旋轉180度) myPic.Width/2, myPic.Height/2為定義旋轉軸心(這裡定義為圖片的中心) 1f為圖片放縮百分比(1為原大小)
6、裁剪圖片
顯示代碼改為:
myScr.Draw(myPic, new Vector2(X, Y), new Rectangle(cx, cy, myPic.Width-20 , myPic.Height-15 ), Color.White, 0f, new Vector2(0, 0), 1f, SpriteEffects.None, 0f);
//cx,cy為裁減後顯示原圖片區域的x和y坐標,myPic.Width-20 , myPic.Height-15 設置了從cx,cy開始顯示的寬和高
7、Alpha通道顯示
顯示代碼改為:
myScr.Begin(SpriteBlendMode.AlphaBlend);
myScr.Draw(myPic, new Rectangle(x, y, myPic.Width , myPic.Height), Color.White); //在上一句定義SpriteBlendMode.AlphaBlend後,程序就會處理帶有通道的圖片,比如png或者用DirectX SDK自帶的DirectX Texture Tool生成的dds文件,如果是普通圖片,週邊背景色將會被替換成代碼中定義的背景色(呵呵,原來弄錯了,改正一下)。
myScr.End();
8、圖片整體Alpha透明度調整
修改顯示代碼中Color參數即可,例如:
myScr.Begin(SpriteBlendMode.AlphaBlend);
myScr.Draw(myPic, new Rectangle(x, y, myPic.Width , myPic.Height), new Color(new Vector4(1, 1, 1, 0.5))) ; //最後一個參數為0-1之間的浮點數,定義了圖片顯示的透明度,前三個參數也為0-1之間的浮點數,分別定義圖片RGB三個通道的透明度。
myScr.End();
9、獲取以及設置圖片具體坐標像素點的RGB值
Texture2D pTex;
pTex = Texture2D.FromFile(graphics.GraphicsDevice, "Tex.dds");
uint[] bytes = new uint[pTex.Width * pTex.Height];
pTex.GetData<uint>(bytes); //獲取圖像數據
pTex.SetData<uint>(bytes); //定義圖像數據
//bytes數組中的數據即圖像數據,通過GetData和SetData就可以完成圖片具體像素點的操作,每個像素數據均包含Alpha值(0xFFFFFFFF Alpha/R/G/B)
10、繪圖函數(畫直線、矩形、圓圈等基本繪圖函數)
尚未解決,期待高人指教(是否使用GDI+?還是XNA中有自帶函數?)。
11、獲取FPS
1 / ElapsedTime.TotalSeconds 即可得到fps
12、鼠標坐標以及按鈕動作獲得
MouseState mouseInfo; //定義鼠標信息變量
mouseInfo = Mouse.GetState(); //獲取鼠標信息
然後通過mouseInfo.X / mouseInfo.Y / mouseInfo.LeftButton等屬性就可以獲得詳細的鼠標信息了。
13、繪制文字
尚未解決,期待高人指教。
今天心得基本就這些了,望大家指正、補足,謝謝~~ |