赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 25400 |
最后登录 | 2014-7-10 |
在线时间 | 0 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 0 小时
- 注册时间
- 2006-12-20
- 帖子
- 213
|
以下引用FDR于2007-6-5 23:54:41的发言:
没细看前面的代码,如果原来没有这个保护的话那必须加上.因为如果没的话,就不仅仅是画面闪烁的问题,而是个错误.毕竟原来的update没有说明是线程安全的,多开一个线程调用它的话,很有可能在update的内部冲突.(想像update执行到一半另外一个update执行)
我说的画面闪烁来自于RGSS层面,不是update自身重复,考虑下面的步骤:
绘制近景
绘制人物
update
本来是都画好才显示到屏幕的,如果还有线程在update,那么可能刚刚绘制完近景就显示在屏幕上了.也有可能近景绘制了一半...这样的画面比起原来就是带点"闪烁"的
个人觉得Hangup异常是可以处理的.比起可能的画面破坏,自己多写点代码处理下异常没什么.异常本来就是让你处理而不是让你回避的.至于RGSS上用多线程,感觉在网络方面的应用要比这样的trick实在.
一般游戏更新顺序是:
更新游戏数据
更新画面
sleep
跳帧处理什么的
这样的步骤的吧
而rm里更新画面就是 Graphics.update 负责处理的吧
那么不管 是否先绘制近景、然后绘制远景 然后在把缓冲区显示到屏幕上,这些都是在
Graphics.update内部完成的吧~~
那么
Thread.critical = true
origin_update
Thread.critical = false
这样在进入更新画面之间就把临界区标记设置为真了,也就不会进行线程的切换,所以必须更新画面全部完成后退出临界区之后才可以切换画面的了,这样会有闪烁么?
即使在没进入临时区前发生现成切换那么也不会有影响的吧。。
至于处理那个异常,其实很多地方都不太好处理的,比如load的地图过大挂掉怎么处理?这只是一个问题而已,一般许多人又8弄脚本的就更不会去处理了= =
ps:想问问fdr一个问题,在rm里调用 Win32API 然后 网络 accept这个函数的时候~~ 它直接阻塞进程了,而不是阻塞的线程,是因为。。?
|
|