WPF 做遊戲是否有前景?

~~~~~~~~~~~~~~~~~~~~~~~~分割線~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
2014年8月17日 更新。
有一個大神給的回復裡面 說的很好,"wpf 也就算得上是搭積木".但是要想建摩天大廈也許就應該從搭積木開始.況且我目前沒有去以此為生的念頭.所以從簡單的入手來做也許理解的會更快.

目前 我已經開始使用wpf 來做了。主要工作分為3部分 遊戲策劃,美工設計,代碼設計。3部分全部由我自己完成,遊戲策劃方面 如果可以的話我也許會找高中的好朋友一起。美工設計不算難,因為 我暫時不會去搞3D動畫。代碼設計這邊真心需要大神的指導。所以後續的更新大部分是關於這裡的。

介於有些大神說 wpf 性能太差。不適合做遊戲。我覺得我應該保守一點,先對遊戲中的關鍵場景做一個demo 試一下。

簡單介紹,遊戲背景目前選定了 dota背景,希望能簡單做一個人物對打的遊戲。
我上網搜了不少資料,博客園藍色大神的帖子那是經常光顧。
我想了一下初次做不要做太複雜的,那麼關鍵場景就設計成 兩個角色入場開始互相對打,其中一個由玩家操作,另外一個由AI操作。

操作主要有 移動、攻擊和4個技能。每個技能都會有相應的動畫。
目前來說 就我所知的wpf動畫的效果,我只會用自己畫幀的方式來描述動畫。
當然我也嘗試了Animation的函數,性能更加不錯,但是目前所知有限,只會用doubleAnimation以及rotateAnimation,完全做不出story應有的效果

這是我現在最頭疼的地方,我希望能達到25fps的效果,目前我的DispatcherTimer的間隔設置成40ms,每一個動作完全用frame類定義,每一幀包含一張圖片,目前就demo來說效果還可以。

但是我知道 一旦增加了畫面中的元素,性能勢必大幅下降。所以特別想學一下關鍵幀動畫以及骨骼動畫的技術。
另外,美工的工作量相當驚人,我感覺大部分時間在做動作設計。

另外,我對整個場景以及角色進行了封裝。
附上場景的類圖

再附上 角色類圖

採用mvp的模式,意圖充分利用wpf的綁定減少代碼量,提高性能,同時在以後對view進行修改時候,也可以盡量減少對model的修改。
spirit 是角色的類,把行為全部定義在 ispirt介面中,以供場景調用。角色屬性則全部封裝在model之中,通過presenter進行操作。
上面提到的動作封裝在actionbase之中,一個動作可能會由多個幀組成
幀定義如下:

{
名稱
位置x
位置y
位置改變類型(相對自己,相對目標,相對場景)
幀圖片
幀延時
幀事件(此事件為以後進行傷害判定等提供了介面)
}

過程如下:
用戶操作-&>生成Action動作-&>每40ms將該動作的幀依次顯示出來-&>動作結束。
幀的顯示相當於對角色位置以及圖片的改動,當然我們可以通過位置改變類型來定義位置改變方式。

所有的frame都可以通過xml文件來進行配置,這樣封裝frame有幾個好處,一是每次調整角色動作幀時只需要更改xml文件以及幀圖片,二是在遊戲初始化時就程序已經把所有的frame載入完畢,性能上會有不錯的表現。

目前就做到這麼多。

真心是wpf 菜鳥,什麼都要學。

今天先到這裡。希望大神們多拍磚。

問題總結:
1.對於動畫的實現方式太過簡單,性能太差,但是也充分理解了 為什麼 國產劇《大鬧天宮》會花費如此之巨的人力物力。下面我會針對骨骼動畫進行充分研究,相信利用Animation可以做出骨骼動畫的效果。也請大神們推薦一下謝謝。
2.並沒有考慮在場景中有多個元素時的性能問題。
3.角色動作僵硬不連貫。
4.多個角色同時存在時,一定會有 互相碰撞的問題,目前還沒有考慮。
5.AI 問題還沒有解決

~~~~~~~~~~~~~~~~~~~~~~~~~~分割線~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


我用WPF做過一個掃雷遊戲。支持實時換膚、換語言、動畫(讓紅棋飄而已)、插件、成績統計。下面是截圖。

整體做下來的體驗就是自虐,運行效果也不好,非常卡。你想想,一個Cell就是一個FrameworkElement,要換膚就要有Style,就是一堆Border什麼的,一個大地圖生成出來就有幾千個Border嵌套在一起,不縮放還好,一但縮放起來,那畫面太美我不敢看。我已經儘力優化到極限了。你們誰有興趣可以繼續優化看看能不能和原生DirectX遊戲鬥法?


所以WPF也只能做這類休閒遊戲了,回合RPG是極限,不能再複雜了,FPS想都不要想。所以可以說沒有什麼可行性。但是你非要用WPF做也不是說完全不行,比如做個精神貓什麼的看創意不看效果的遊戲還是可以的。

全部代碼都在這裡:

Clear Mine - Home


如果要編譯請讀下ReadMe,裡面有自定義的PixelShader函數,用於一個使用GPU直接渲染的動畫。所以編譯起來還挺複雜。當然,也可以把那部分刪除。


放在十年前可以問
Winform做遊戲是否有前景 ?
現在看來答案明顯是否定的。不是說Winform不能做遊戲,其實也有一些使用Winform做的很精緻的遊戲,但是從整個行業來說這是沒有前景的,因為Winform並不是為了做遊戲而生的,只是一個GUI庫,就像用鍋碗瓢盆也能演奏出很不錯的音樂,但這種音樂是沒有前景的。

所以對於WPF來說答案應該也類似,並不是說WPF不能做遊戲,利用WPF的圖形特性可以做出很優質的遊戲(不過一般只是小遊戲),但開發難度和成本與專門的遊戲引擎相比是毫無優勢的,所以在遊戲這一塊,WPF應該是沒有前景的。


你怎麼會覺得一個GUI庫是用來做遊戲的呢?


插圖:《職業與業餘》 無缺草製造

顯而易見,WPF遊戲方案與職業開發相比,是非常業餘和粗陋的。參見附圖,如同童車要參加速度與激情的比賽一樣。

簡單來說,C#WPF和C++DirectX方案比較,程序有3-10倍的內存佔用,渲染畫面多用3到數百倍的時間(幀率低同樣倍數)。要知道買一個上千的顯卡可能才把幀率提高一倍,這裡一個程序就降了3倍以上。作為在市場中競爭的賽車手,你會買一輛最高20KM的兒童車嗎?顯然不會。當初,DirectX就是為了解決GUI遊戲性能低下的問題才發明的直接操縱顯存的方案。加之C#是比C++運行更低效的語言,WPF是比WinForm更佔資源的框架。而所謂WPF調用DirectX優化加速的小把戲,還是GDI級別的,與真正的操控顯卡不可同日而語。

即使是XNA(對DirectX再次封裝),也因為增加了封裝,比直接調用DirectX要臃腫和緩慢。加之客戶端要在拖油瓶的.net庫之外再安裝一個XNA運行庫,猶如一根電線拖了一堆瓶瓶罐罐咣當咣當響。因而在國內人跡罕至。但在國外的XBOX平台上用得較多,官方開發工具就是用 XNA。XBOX因為固定硬體並預裝相關環境,開發起來比較容易。國外遊戲市場主要是主機,如果你專門針對美國市場開發XBOX遊戲,是可以選擇XNA的,但可能需要專門的開發機。

在Windows上WPF可以做益智、非即時戰略類等對幀數要求不高的遊戲,但要安裝幾十M的.net庫是個大問題。因此,在Windows下只能當做兒童車,業餘練習玩一下。專業來說,頁遊方面,Flash可以免安裝在線分發,所以很普及。而C++DirectX的遊戲,是大部分專業桌面遊戲的選擇。


不適合,可以做些桌面小遊戲,像掃雷之類的,但是稍微複雜一些的遊戲就不要用了。
WPF從來都不是為這個設計的,它的3D只是噱頭而已。
我自己用它做過一些遊戲,大到一定層度之後,內存和性能就是你無法解決的大坑,我也是dota愛好者,千萬不要用WPF做,否則你會死的很慘的。


那要看什麼遊戲,如果想寫 WOW或者LOL那樣的,趁早死心吧。
如果是休閑類小遊戲,用GUI框架寫是沒問題的,比如你寫個掃雷或空檔接龍肯定不需要專門的遊戲引擎。
再比如這個,用Qt GUI框架寫的跨平台三國殺
太陽神三國殺_百度百科


前景恐怕不容樂觀,畢竟wpf出來快十年了如果有前途早就有成功例子了。

不過用wpf做遊戲還是有一定優勢的,例如,使用xaml做遊戲界面相當方便。微軟就有wpf和directx結合的例子。甚至有一些黑科技讓xna和wpf一起用,後來微軟還把這些技術直接集成在silverlight和windows phone 7.5里。

總的來說,如果你把windows store也看作wpf的延續,打算做一些快速實現的小遊戲,又不願意用unity3d等引擎,體驗上還是很爽的。至於能不能賺到錢,主要看創意,一個只有500行代碼的flappy bird都能大賣,還有什麼不可能的呢?


可以做經典名作《北京浮生記》的姊妹篇吧。


我還是第一次聽說用XAML啥的來做遊戲的...


生平唯一一次用C#+XAML做遊戲,是《C#入門經典》里的demo lol


怒答,wpf從架構上來說,做遊戲完全可以,甚至也很容易。但wpf有個致命缺點,就是性能問題。做普通界面的特效尚且容易卡,做遊戲就更加了。除非做神經貓這種。還有個非致命缺點,就是xp下需要自帶.net框架,這對分發來說太不友好。


http://cnblogs.com 深藍色右手。
雖然沒有成功不過 還是感覺很厲害的樣子


用wpf做過期貨交易客戶端,一般的UI沒問題,行情的分時線用layer就卡的一塌糊塗,拖動和滾動滑鼠導致重繪太多,無奈換思維內存中繪製bitmap然後刷新到界面,仍然卡,,,
所以wpf就別想實現高頻渲染,


WPF是做GUI部分的,離一個遊戲引擎需要的東西還有差距。
1.動畫系統 有 2D
2.多媒體資源支持 (GDI+ 看Windows支持)
3.圖形系統 不靈活,幾乎沒有(Dx互操作不好用)
4.AI 沒有
5.場景編輯器 有 Blend
6.粒子系統 沒有(不是太難可以自己寫)
7.物理系統 沒有
8.音效系統 沒有
9.邏輯腳本 直接用C#寫,可以不要
10.UI 有,很強大
沒有的可以自己實現,或用第三方庫。(Freetype Assimp DevIL/FreeImage SDL OpenTK SlimDx/SharpDx Fmod ODE/Physx/Bullet)。感覺UI框架固定,不靈活,圖形渲染不能更好的擴展,不然做點修改可以做遊戲引擎。


gdi做遊戲都比wpf做遊戲好啊。。。。

其實gdi遊戲還是wpf遊戲我當年閑得無聊的時候都做過。
然而我的wpf遊戲其實只有外框是wpf。。。。。。

如果全是wpf我覺得性能看不下去。。。。


用cocos2dx或者u3d,目前最成熟的跨平台遊戲框架。人生苦短,wpf還是算了吧,浪費時間。


沒有。不適合做遊戲。只適合做綜合類程序 比如需要豐富ui及互動 內嵌三維展示。wpf有些尾大不掉 好難伺候的說


工具/技術的誕生都是有目標的。
WPF 是一個GUI庫,擅長構造用戶界面。遊戲不是它的強項。
當然,你說遊戲也有GUI我也沒法反駁。而且你非得用WPF做的話,估計花點時間也是能做出來的,而且真得會讓人覺得你技術特別牛逼。


講真,如果題主是擅長C#的coder的話,不妨試試Unity3D,但如果用WPF做遊戲的話....還真是有點(一個GUI來做遊戲真的是...)


根本就不是適合不適合的問題,遊戲的核心跟用什麼框架完全沒關係。全屏以後有啥GUI?


雖然這個答案很晚了,我還是提一下一個,和你一樣想法的人---深藍色右手
我不知道題主為啥沒看到他的博客,而且這麼多答案都沒有提到他,感到莫名的悲哀!!!(你們真的學過用過wpf么?)
裡面有完整的一步一步的案例(Silverlight)。
不過後面都很無奈。


推薦閱讀:

TAG:遊戲開發 | Windows Presentation Foundation (WPF) |