[問題] XNA搭配windows form的問題

看板C_Sharp作者 (以光為名)時間11年前 (2013/01/29 20:42), 編輯推噓3(301)
留言4則, 2人參與, 最新討論串1/1
是這樣的,因為專案需求正在練XNA,基本的運作模式都OK了,單單使用XNA跑Game都蠻順 只是XNA的轉場功能實在不是很好用,看書上的練習都只是在Updata和Draw寫switch, 好比一個最基本的遊戲選單,明明就是很靜態的狀態, 也要用XNA那樣一秒好幾次的邏輯判定在跑,實在很沒必要,想回去用Windows form, 經過Google後發現了這一篇有蠻可行的實作法 http://www.dotblogs.com.tw/help/archive/2009/02/04/7027.aspx 簡單說就是開一個windows form,上面放一個panel, 然後XNA還是照開,把XNA的繪圖都畫在panel上,這樣就可以用windows form的物件了, 這樣做下來還OK,我做兩個panel,一個是選單,一個是XNA, 要用選單的時候把選單panel移到中間,XNA panel移到視窗視線外,以此類推 用這種偷渡法做轉場 不過嘛,還是有點不滿意,比較希望的還是真正XNA要運作的時候才開出來, 所以我動手想小改改看,我把program.cs裡面的new Game1都拿掉, 改成Application.run(form),先只開一個form出來, 然後在form的程式碼裡面到遊戲開始的地方,才開始寫new Game1, run 不過這樣運作會跳出異常例外,說明是不允許在單執行緒再多開一條緒, 這樣我就不是很懂要從哪個地方下手了, 我試過new Thread(new Game1),想說你要多緒就開給你, 不過Thread沒吃,我也不知道要怎麼對Game1的類別增加Runnable的能力 (C#多執行緒我不是學得很扎實,是用java的概念想的,不知道是不是這麼一回事) 再來就是我亂猜的,Google也找不到, 是不是可以開通一個..多執行緒的權限,讓程式變成可以開多線的狀態, 就可以讓我開兩條了(我也不是真的需要兩條,XNA開起來原來的就可以關掉了) 請教一下板上的高手這種windows form to XNA的轉場做法是不是真的可行? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.162.162.45 ※ 編輯: stu87616 來自: 1.162.162.45 (01/29 20:44)

01/29 20:59, , 1F
其實winform底下也是事件迴圈 只是包起來沒讓你看到而已
01/29 20:59, 1F
這麼說也是啦,雖然不是很瞭解,不過從Application.run就大概猜的到, 只是winform比較適合處理介面這類狀態, 說到底也就是對XNA的轉場不滿意而已, 希望能不同的場景就是不同份Updata和Draw在運作,這樣也比較容易管理 ※ 編輯: stu87616 來自: 1.162.162.45 (01/29 21:10)

02/13 15:50, , 2F
State Pattern
02/13 15:50, 2F

02/13 15:52, , 3F
XNA遊戲很少人new 一堆Game,通常是在Game底下用state
02/13 15:52, 3F

02/13 15:52, , 4F
pattern,詳情請參閱design pattern
02/13 15:52, 4F
文章代碼(AID): #1H1yEsxq (C_Sharp)