MFC中的移动效果

vision66 2013-03-20 09:30:31
请问三下, MFC中的移动效果, 怎么才能做到平滑的过度?
我是用SetTimer(100, 50, NULL)设置定时器, 然后在WM_TIMER中画图或者移动控件, 但是实际效果是一顿一顿的, 计算出的帧率也没有达到 1000/50帧. 通常都是怎么干的呢?
1.移动窗口/对话框
2.移动控件
3.移动图片
...全文
211 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
来学习一下。呵呵。
菜牛 2013-04-14
  • 打赏
  • 举报
回复
你说的都是什么情况下的“移动”?我看你举的应该是指用鼠标移动对象?那应该在鼠标移动消息中改变对象位置,跟计时器没有关系啊。如果指的是和视频播放一样在函数中使对象移动,那可以用循环直接修改对象位置而不是用计时器,那样肯定平滑(逐像素),游戏循环就这样。为了防止消息阻塞,循环中需要对消息处理,游戏循环就是直接在主消息循环中插入一个更新帧的函数,你可以参考。或者在自己的循环中用PeekMessage检测消息,有的话再去DispatchMessage;GetMessage是阻塞的不能用。
vision66 2013-04-12
  • 打赏
  • 举报
回复
游戏编程的话, 那个定时器应该和我说的这个不是一样的. "平滑移动,确实要多设置几步", 这个似乎意味着还得提高帧数; 迅雷和企鹅是怎么整啊..
sumos 2013-03-20
  • 打赏
  • 举报
回复
引用 1 楼 yangyi_33855 的回复:
这三个移动的问题实际都一样,可能是你设计的移动函数有问题吧,比如说把控件坐标从(x1,y1)移动到(x2,y2),你要多设置几步来移动。“帧率也没有达到 1000/50帧”,注意下对话框里面的刷新操作吧。 而且SetTimer(100, 50, NULL),你需要100个定时器来做么?一进程里头超过两个定时器,效率肯定不高,建议看看游戏里面的循环吧。
SetTimer(100, 50, NULL),你需要100个定时器来做么? 你说错了,100是Timer的ID。 平滑移动,确实要多设置几步。
yangyi_33855 2013-03-20
  • 打赏
  • 举报
回复
这三个移动的问题实际都一样,可能是你设计的移动函数有问题吧,比如说把控件坐标从(x1,y1)移动到(x2,y2),你要多设置几步来移动。“帧率也没有达到 1000/50帧”,注意下对话框里面的刷新操作吧。 而且SetTimer(100, 50, NULL),你需要100个定时器来做么?一进程里头超过两个定时器,效率肯定不高,建议看看游戏里面的循环吧。
gh_doit 2013-03-20
  • 打赏
  • 举报
回复
帧率也没有达到 1000/50帧,这个有点疑问? 50应该是毫秒,那你1000/50=20帧/毫秒吗?如果这样,帧率太高了吧。 一般来说实际情况25帧/秒应该就可以吧,比如电视台的节目就是25帧/秒,看起来就很顺畅了。不知道是不是我什么地方理解错了.....

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧