作者stu87616 (以光为名)
看板C_Sharp
标题[问题] XNA搭配windows form的问题
时间Tue Jan 29 20:42:24 2013
是这样的,因为专案需求正在练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)
1F:推 chchwy:其实winform底下也是事件回圈 只是包起来没让你看到而已 01/29 20:59
这麽说也是啦,虽然不是很了解,不过从Application.run就大概猜的到,
只是winform比较适合处理介面这类状态,
说到底也就是对XNA的转场不满意而已,
希望能不同的场景就是不同份Updata和Draw在运作,这样也比较容易管理
※ 编辑: stu87616 来自: 1.162.162.45 (01/29 21:10)
2F:推 huw12313212:State Pattern 02/13 15:50
3F:推 huw12313212:XNA游戏很少人new 一堆Game,通常是在Game底下用state 02/13 15:52
4F:→ huw12313212: pattern,详情请参阅design pattern 02/13 15:52