金橋科普  
設為首頁 關于我們 郵箱登錄
科普聚焦
您現在的位置: 首頁 >> 科普頻道 >> 電腦遊戲 >> 文章詳情
XNA2D入門

tpttpt11 gameres 2006-09-30
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、繪制文字

尚未解決,期待高人指教。

 

今天心得基本就這些了,望大家指正、補足,謝謝~~


  發表評論 寫信給編輯 關閉窗口
同欄目內容
· 瑞典在網遊中開設虛擬大使館 2007-06-06
· 魔獸爭霸3秘籍(魔獸無敵秘籍) 2007-03-28
· 第一次Collision AI 2006-09-30
· OpenGL GUI教程(一)2 2006-09-11
· OpenGL GUI教程(一) 2006-09-11
· 動畫DirectDraw之旅(1) 2006-09-04
相關內容
近期主推
西藏發現青藏高原最大冰川群
·西藏發現青藏高原最大冰川群
·中日: "月亮女神"攜手"嫦娥"
·行星大碰撞砸死恐龍催生人類
·美研制會飛汽車定價9萬美元
·美國教授設計出自適應機器人
·銀河系可能有20多個黑洞
近期熱門
英海域驚現大龍蝦為普通龍蝦5倍
·英海域驚現大龍蝦為普通龍蝦5倍
·新物種金蛙體表有劇毒
·我國嫦娥工程計劃測量月球
·精神病藥物可治多種癌症
·視覺震撼:來自海底的精靈
·能刪除不良記憶的藥物誕生
近期焦點
廣西發現罕見溶洞鐘乳石有30萬年
·廣西發現罕見溶洞鐘乳石有30萬年
·澳大利亞驚現“卡布基諾”海灘
·美國"彩色"瀑布夜幕下震撼遊人
·地球上究竟有多少個物種
·英國探險家北極遊泳破紀錄
·世界之最 世上最小的動物
金橋科普是一個公益性欄目,內容由作者提供或摘自互聯網,其目的是向廣大網民普及科學技術知識。如果您發現本網站轉載或摘編了您擁有著作權的作品,請通知我們(電話:023-63659911),我們立即刪除。
關于我們 | 網站地圖 | 用戶注冊 | 廣告客戶 | 招聘信息 | 業務信息
Copyright@2006-2009 JQInfo.com,WONDER. All Rights Reserved
重慶科技咨詢中心.重慶網得信息技術有限公司.版權所有
Email:webmaster@jqinfo.com
重慶數據通信局提供網絡帶寬. 渝ICP備05002327號