游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2756|回复: 3

c#做游戏外框,要不要使用消息泵

[复制链接]

33

主题

159

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
QQ
发表于 2012-3-15 19:42:00 | 显示全部楼层 |阅读模式
自己兴趣学学的编D3D程序,所以之前一直都是使用WIN32的框架,最近比较兴趣C#的网络编程能力(说方便是真滴),所以做了个小的D3D框架
其中主要对D3D进行实际操作的是一个 非托管的win32 c++ dll工程
再外面包了一个C++ CLR的包装工程
最外面是C#的壳,

结果问题来了,我使用C#下的TIMER控件,即使以0.001秒为间隔,最大FPS只有60(用WIN32调用可以到500+的FPS),
然后索兴把TIMER干了,新开了一个线程 + while(true)喵的专门来对付每帧的display 结果FPS还是60 - -!
然后又调整了时间片 改成RealTime级,结果还是一样。
之后今天一整天泡在MSDN找这个,说是要加个idle事件,并在里做message loop
偶套了网上给出的那个消息泵,因为费了好几天时间了,按下F5时那个激动啊~
喵的,结果又显示FPS 60

哎,有这个经验滴同志们 施舍点给偶好不,我已经几天没睡好勒

33

主题

159

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
QQ
 楼主| 发表于 2012-3-15 22:13:00 | 显示全部楼层

Re:c#做游戏外框,要不要使用消息泵

喵,找到门道了,好久以前的managed direct里有这个消息循环的做法

33

主题

159

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
QQ
 楼主| 发表于 2012-3-16 21:20:00 | 显示全部楼层

Re:c#做游戏外框,要不要使用消息泵

喵了个咪啊,找到原因了
1 如MANAGED DIRECT sampler里一样在idle事件下面做消息循环
2 垂直同步关(事实上如果能保证FPS>30 应该开垂直同步)
3 对于每帧操作的 frameMove frameRender 特别是 present(0,0,0,0)这些个,扔进回调,或者直接在C#里面做相应的异步delegate invoke 前提是做好临界处理,要是同一时间俩线程同时修改一个值,喵的,就爆了

9

主题

86

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
发表于 2012-4-3 22:59:00 | 显示全部楼层

Re:c#做游戏外框,要不要使用消息泵

要的,PeekMessage.调API吧。。。
FPS不是越高越好,听说FPS就是每秒钟绘图次数,所有有些游戏就刷这个数值,但是很显然,绘画的次数太多也不是什么好事,比如耗CPU就是一个很大的问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 16:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表