Windows8 遊戲開發教程-一、Metro UI 和繪圖

來源:互聯網
上載者:User

http://www.cnblogs.com/crazylights/archive/2011/10/07/2200821.html

仔細想了想,叫做教程似乎不太合適,應該算作一種討論。

windows 8 已經玩了一段日子,相信大家對Metro UI已經不陌生了。

Metro UI的介紹 我想很簡單就可以帶過了。

 

首先是布局方式,採用XAML布局,雖然外觀看起來簡單過了頭,這是從zune 和wp7 那裡繼承來的風格。

沒有視窗概念,取而代之的是Page。下一層次是控制項,容器控制項可以放子控制項。

根據容器控制項的特徵決定子控制項的定位方法。

有幾個常用容器控制項:grid,border,canvas

canvas是堅決從左上方按照 像素定位。

grid是劃分成幾個行欄區域,將子控制項布置在內,然後可以選擇停靠方向和位移,很近似 html的定位方法。

border子控制項自動填滿。

常用功能控制項

TextBlock  標籤控制項,顯示文本

TextBox    文本編輯框

Image       圖片控制項

Button      按鈕

 

控制項可以指定屬性和事件

wpf/silverlight 那一套,Metro UI 介紹完畢。

使用MetroUI的程式是用application.Run 啟動的,不用關心怎麼調用的,雖然你也可以重寫Main函數。

建立一個c# 的 black page 項目,都會自動建立好,然後給MainPage添加一個Loaded事件就可以開始寫初始化代碼了。

 

關於繪圖,windows8 還沒有提供XNA,看看現在winmd的廣泛使用,我們不用等XNA了,自己弄一個吧。

windows8 給出了Dx的樣本,不過是用c++編寫的,c++的執行效率高,開發效率讓人非常苦惱。所以我們要把繪圖介面整回到c#來。

windows8 給出的DX樣本是工作在coreapplication架構下的,xaml神馬的都不能用,那種方式UI、神馬神馬的,全部都得用DX繪製出來。

我並不喜歡這個方式,我很想用xaml做遊戲介面,所以我們要想點辦法,不放棄介面,還要用DX。

 

於是,我們做到了。

用c++ 做一個封裝,封裝成winmd形式,先來看一下樣本(svn地址圖裡找

 

win8clgc = crazylights graphics core

圖形核心,基本繪圖方法。先弄個2D的,3D我沒打算裸奔DX,回頭看看有沒有代碼量不大的開源引擎,直接並一個進去。

如果你只是需要一個 win8 可用,c#可調用,高效能的繪圖功能,那隻虛熟悉下clgc的介面即可。

目前已封裝了D2D和DWrite的部分功能。

svn 地址

win8clgf  = crazylights graphics framework

圖形架構,目前只實現了一個介面,把RenderTarget的內容 複製到 Image控制項中。

以後在這裡丟一些介面系統、2D情境、精靈系統神馬的。

 

使用時僅需三步

1.引用 win8clgc.winmd

2.初始化clgc,建議給MainPage添加一個Loaded事件做初始化

3.編寫邏輯,如果需要update,建議使用DispatcherTimer,因為只有在主線程上才能更新Image控制項,即使新開線程更新,幀數還是被主線程限制。

只要CopyImage 就會將繪製內容顯示到Image控制項中,copyImage的實現很簡單,你也可以不引用clgf,直接把copy功能包括在你的項目中,bytes在隱藏的部分代碼中由rendertarget返回。

 

目前的Render介面

可以看到提供了兩組DrawBitmap和DrawText介面,有興趣可以自己測試了。

 

測試程式

綠色背景區為即時繪製

http://www.cnblogs.com/crazylights/archive/2011/10/07/2200821.html

仔細想了想,叫做教程似乎不太合適,應該算作一種討論。

windows 8 已經玩了一段日子,相信大家對Metro UI已經不陌生了。

Metro UI的介紹 我想很簡單就可以帶過了。

 

首先是布局方式,採用XAML布局,雖然外觀看起來簡單過了頭,這是從zune 和wp7 那裡繼承來的風格。

沒有視窗概念,取而代之的是Page。下一層次是控制項,容器控制項可以放子控制項。

根據容器控制項的特徵決定子控制項的定位方法。

有幾個常用容器控制項:grid,border,canvas

canvas是堅決從左上方按照 像素定位。

grid是劃分成幾個行欄區域,將子控制項布置在內,然後可以選擇停靠方向和位移,很近似 html的定位方法。

border子控制項自動填滿。

常用功能控制項

TextBlock  標籤控制項,顯示文本

TextBox    文本編輯框

Image       圖片控制項

Button      按鈕

 

控制項可以指定屬性和事件

wpf/silverlight 那一套,Metro UI 介紹完畢。

使用MetroUI的程式是用application.Run 啟動的,不用關心怎麼調用的,雖然你也可以重寫Main函數。

建立一個c# 的 black page 項目,都會自動建立好,然後給MainPage添加一個Loaded事件就可以開始寫初始化代碼了。

 

關於繪圖,windows8 還沒有提供XNA,看看現在winmd的廣泛使用,我們不用等XNA了,自己弄一個吧。

windows8 給出了Dx的樣本,不過是用c++編寫的,c++的執行效率高,開發效率讓人非常苦惱。所以我們要把繪圖介面整回到c#來。

windows8 給出的DX樣本是工作在coreapplication架構下的,xaml神馬的都不能用,那種方式UI、神馬神馬的,全部都得用DX繪製出來。

我並不喜歡這個方式,我很想用xaml做遊戲介面,所以我們要想點辦法,不放棄介面,還要用DX。

 

於是,我們做到了。

用c++ 做一個封裝,封裝成winmd形式,先來看一下樣本(svn地址圖裡找

 

win8clgc = crazylights graphics core

圖形核心,基本繪圖方法。先弄個2D的,3D我沒打算裸奔DX,回頭看看有沒有代碼量不大的開源引擎,直接並一個進去。

如果你只是需要一個 win8 可用,c#可調用,高效能的繪圖功能,那隻虛熟悉下clgc的介面即可。

目前已封裝了D2D和DWrite的部分功能。

svn 地址

win8clgf  = crazylights graphics framework

圖形架構,目前只實現了一個介面,把RenderTarget的內容 複製到 Image控制項中。

以後在這裡丟一些介面系統、2D情境、精靈系統神馬的。

 

使用時僅需三步

1.引用 win8clgc.winmd

2.初始化clgc,建議給MainPage添加一個Loaded事件做初始化

3.編寫邏輯,如果需要update,建議使用DispatcherTimer,因為只有在主線程上才能更新Image控制項,即使新開線程更新,幀數還是被主線程限制。

只要CopyImage 就會將繪製內容顯示到Image控制項中,copyImage的實現很簡單,你也可以不引用clgf,直接把copy功能包括在你的項目中,bytes在隱藏的部分代碼中由rendertarget返回。

 

目前的Render介面

可以看到提供了兩組DrawBitmap和DrawText介面,有興趣可以自己測試了。

 

測試程式

綠色背景區為即時繪製

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.