模仿联众的对战俄罗斯:
问题1:
我创建了两个线程,分别管理对手和自己的俄罗斯方块(在各自的线程中对主线程的VIEW进行画图).
现在已经实现,当我处理自己一方的时候(一个人玩),画图程序很好运行。
但是当我开始对战,两个线程同时对VIEW进行画图时,有时候会出现黑色一块,白色一块(我是小块更新,所以InValidRect这么一小方块,大概是没有画成功,或者是没有更新成功,但是返回函数多是成功的)
不过出现的几率不高,但是一盘玩下来,总会有一两次,所以很影响程序的效果.
虽然联众有时候也会发生这个情况,但是几率很小,玩N盘,才偶尔有这个情况(没有正确更新).
不过我把对战取消,自己玩时,更本就不会出现这个问题.
(注:两个线程同时操作VIEW时,没有用同步,不知道会不会是这个问题)
问题2:
对战时,对手的俄罗斯数据怎么处理?自己的俄罗斯方块运行多是通过动作实现的(旋转,往下掉等),
如果对手也是通过发送过来的动作来处理,那么好象数据量太大了(导致画图频繁),
还有一个方法大概就是传递俄罗斯方块的位置信息,和本方采用不同的画图方法( 直接采用位置更新,不需要通过动作计算位置了.)对于这两种(传递动作,传递位置信息)哪种适合?
问题1:
我创建了两个线程,分别管理对手和自己的俄罗斯方块(在各自的线程中对主线程的VIEW进行画图).
现在已经实现,当我处理自己一方的时候(一个人玩),画图程序很好运行。
但是当我开始对战,两个线程同时对VIEW进行画图时,有时候会出现黑色一块,白色一块(我是小块更新,所以InValidRect这么一小方块,大概是没有画成功,或者是没有更新成功,但是返回函数多是成功的)
不过出现的几率不高,但是一盘玩下来,总会有一两次,所以很影响程序的效果.
虽然联众有时候也会发生这个情况,但是几率很小,玩N盘,才偶尔有这个情况(没有正确更新).
不过我把对战取消,自己玩时,更本就不会出现这个问题.
(注:两个线程同时操作VIEW时,没有用同步,不知道会不会是这个问题)
问题2:
对战时,对手的俄罗斯数据怎么处理?自己的俄罗斯方块运行多是通过动作实现的(旋转,往下掉等),
如果对手也是通过发送过来的动作来处理,那么好象数据量太大了(导致画图频繁),
还有一个方法大概就是传递俄罗斯方块的位置信息,和本方采用不同的画图方法( 直接采用位置更新,不需要通过动作计算位置了.)对于这两种(传递动作,传递位置信息)哪种适合?
解决方案 »
- 实在不行了,折腾很久了,为什么我直接编译DDK2000里面的Oemdll,用OEMDLL.inf安装会出现问题?
- (急~在线等!)关于定时查询启动
- 为什么我重载WindowProc()函数,响应我的动作,然后怎么就不响应其它的呢,代码如下?
- 如何把EXE文件封装到DLL中
- 统计一下,做VC的月薪有多少?分多闲着也是闲着,不如送一点给朋友
- 怎么使一个对话框最大化显示??急?
- 赋值出错!
- 请帮忙告诉几个可以下载电子书的网站,有重谢!
- 怎样将数子转换为 字符串??bstr怎样转换为wchar???
- 一个很奇怪的问题,关于CoResumeClassObjects函数。
- 串口通信问题
- 急...請問︰WinXp Home版本缺點和2003Server的連接授權問題。
线程中的CDC你是怎么传递的,是传的句柄还是指针?最好还是传句柄。另外,本人感觉InvalidRect不大好用。想想其它办法
问题2:
用第二种办法吧
不知道这样能否解决楼主的问题。
两个线程同时拥有CDC可能会有一些麻烦。
现在出现黑块的情况好多了,没有以前那么多了,但是还是会出现。我用的是GetDC(m_hWnd),这样得到的是HDC,不知道用HDC,和直接用CDC有什么区别?