CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  游戏开发

请问为什么才画了100多个正方形CPU就...

楼主game321321()2006-03-10 10:30:23 在 专题开发/技术/项目 / 游戏开发 提问

void   GameLoop()  
  {  
  MSG   msg;  
   
  PeekMessage   (&msg,NULL,0,0,PM_NOREMOVE);  
  while   (msg.message   !=   WM_QUIT)  
  {  
  if(::PeekMessage   (&msg,NULL,0,0,PM_REMOVE))  
  {  
  TranslateMessage(&msg);  
  DispatchMessage(&msg);  
  }  
  else  
  {  
   
  if(NULL   !=   lpD3D)  
                              lpD3D->render   ();  
  }  
  }  
  }  
   
   
  lpD3D::render   ()  
  {  
     这里循环画100个三角形  
     为什么CPU一直在90%左右呢?  
  } 问题点数:20、回复次数:6Top

1 楼game321321()回复于 2006-03-10 11:53:07 得分 0

好象画一个三角形也是90%多  
  为什么?  
  是哪里出了问题?  
  Top

2 楼i_noname(晚九朝五)回复于 2006-03-10 12:32:45 得分 5

void   GameLoop()  
  {  
  MSG   msg;  
   
  PeekMessage   (&msg,NULL,0,0,PM_NOREMOVE);  
  while   (msg.message   !=   WM_QUIT)  
  {  
  if(::PeekMessage   (&msg,NULL,0,0,PM_REMOVE))  
  {  
  TranslateMessage(&msg);  
  DispatchMessage(&msg);  
  }  
  else  
  {  
   
  if(NULL   !=   lpD3D)  
                              lpD3D->render   ();  
  }  
  sleep(1);//留点时间让cpu去干别的事  
  }  
  }Top

3 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2006-03-10 12:48:20 得分 15

即便一个三角形不画,你一直在那里循环也一样cpu占用巨大啊  
   
  你可以改造一下,只有当画面变化的时候才更新屏幕,调用Render就不至于了Top

4 楼game321321()回复于 2006-03-10 13:41:48 得分 0

happy__888([顾问团]寻开心)   我是窗口模式按照大哥说的方法 如果画面没有改变不进行render那么窗口被东西覆盖后游戏画面就没有了,而且做连续动画好象也不好做哦  
   
  i_noname(晚九朝五)   大哥说的方法很管用  
  但  
   
  我看到的所有d3d教程上面都是下面这样的一个循环啊,请问一般游戏中的循环是怎么样的?  
  void   GameLoop()  
  {  
  MSG   msg;  
   
  PeekMessage   (&msg,NULL,0,0,PM_NOREMOVE);  
  while   (msg.message   !=   WM_QUIT)  
  {  
  if(::PeekMessage   (&msg,NULL,0,0,PM_REMOVE))  
  {  
  TranslateMessage(&msg);  
  DispatchMessage(&msg);  
  }  
  else  
  {  
   
  if(NULL   !=   lpD3D)  
                              lpD3D->render   ();  
  }  
  }  
  }  
  Top

5 楼game321321()回复于 2006-03-10 14:19:39 得分 0

D3DPRESENT_INTERVAL_IMMEDIATE   去掉这个立即刷新 CPU一下子降了  
  不过不知道对程序有什么影响 动画要连续又不想CPU占用太多 不知道这里应该设置什么好Top

6 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2006-03-10 15:29:11 得分 0

D3DPRESENT_INTERVAL_IMMEDIATE   控制的是刷新的次数  
  指定它的时候,你只要调用present这样的语句,就立即更新画面  
  如果不是它,那么就要等到显示器垂直回显的时候才能会更新画面,这样就会限定一定的更新速度  
   
  动画连续不连续,是受到很多因素的影响的  
  cpu的速度,显卡的速度,以及动画模型的复杂程度  
   
  视觉上的连续,只要在每秒25帧左右的速度更新就可以实现  
  我的意思是,你的动画的更新速度就是你的刷新的速度  
  你只要保证每秒钟更新画面25次以上,基本上就是连续  
   
  当然更新的速度越多,越连贯,但是响应的cpu的占据也就越高,需要一个平衡Top

相关问题

  • 为什么我的打印机打不了正方形 Printer .Canvas.Rectangle(Rect(0,0,200,200))出来是长方形
  • 急``怎样用CDC类在对话框上画一个指定颜色的正方形?
  • 大哥帮帮忙,怎样用gdi在picturepox中画一个正方形或圆那?最好有原代码。
  • 如何打印正方形?
  • 请问我在向文本文件写内容时想产生一个换行(也就是回车),但打开后查看内容发现并没有换行,换行的地方变成了一个实心的正方形的符号,这是为什么???
  • 编写一个程序计算圆,圆内接正方形,和圆外切正方形面积和周长
  • 把picture1.width,picture1.height都设为50,但不是正方形?
  • 请问怎么实现从正方形逐渐变成圆的??
  • 怎样在网页中输入一些特殊的符号,如五角星,正方形,圆形等
  • Authorware播放时出现一个正方形内一个大叉的图像,是什么原因?请指教。

关键词

  • pm
  • null
  • lpd3d
  • msg
  • peekmessage
  • 更新
  • 画面
  • 动画
  • 速度
  • render

得分解答快速导航

  • 帖主:game321321
  • i_noname
  • happy__888

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo