[讨论]新的暂停画面的实现思路
gmstudio吧
全部回复
仅看楼主
level 5
醉在秋杀 楼主
我突然想到一个新法子,GMS 1.3 版本中加入的新的内置变量:Application Surface
这样就不用Create from Surface ,直接暂停Application Surface的绘制交换链,同时解散相关的OBJ。。
参考:http://docs.yoyogames.com/source/dadiospice/002_reference/surfaces/the%20application%20surface.html
你可以简单的理解这个表面就是:GMS绘制事件中所调用的表面(画布),也就是默认的所有Draw 操作都绘制在这个表面上。
每一步先 Draw_clear() 然后绘制这个表面,呈现游戏画面。现在, 我们暂停游戏只需取消 Draw_clear() ,同时解散相关OBJ。
为什么?因为OBJ都解散了,不存在Draw操作,不会对这个系统表面进行图画,同时系统表面并没有被Clear.我们就一直绘制这个表面即可。
要恢复的时候,激活OBJ,并继续Draw_clear()操作。
在哪里绘制这个表面?在Draw GUI 事件中 Draw_surface();
在哪里 Clear Application Surface?在 Draw_start事件中 Draw_clear() , Application Surface 就是默认的系统画布,直接用相关的Draw函数;
2014年05月14日 09点05分 1
level 5
醉在秋杀 楼主
哦,忘了一点,还需要预先调用application_surface_draw_enable(flag);
FLAG填写False,使得GMS不会自动处理绘制。
2014年05月14日 09点05分 2
level 5
这变量还没细读,不过喵的理解,因为Application Surface相当于所有draw事件的绘制表面,所以通过解散并暂停这个表面的绘制确实可以实现暂停效果,不过估计会没有机会只暂停一部分的游戏内容(比如暂停背景的游戏画面,而前景的按钮什么的仍然可以活动并操作等等啦)
相比之下喵还是比较喜欢传统的view_surface_id做暂停的效果,因为可以针对view单独获取draw画面,所以相当容易控制…… 唔唯一不好的地方就是必需要强行使用view。
不过Application Surface用作画面处理确实蛮赞的~
2014年05月15日 11点05分 3
回复在下一楼
2014年05月15日 12点05分
level 5
醉在秋杀 楼主
不过估计会没有机会只暂停一部分的游戏内容(比如暂停背景的游戏画面,而前景的按钮什么的仍然可以活动并操作等等啦)
关于这个问题,是不可能出现的,在2L中,我已经补充了一个前提函数,终止GMS对这个表面的自动处理,然后再开发者使用函数手动清除。最后结合1L中的参考,可知事件的先后顺序。显然,我们的结果是完整的。
2014年05月15日 12点05分 4
唔…… 还是不太明白,Application Surface不是所有绘制的默认表面么,暂停的时候这个表面确实可以留着不动来作为背景的暂停画面,不过就没有其它的表面来做默认绘制了,可以活动的前景画面绘制在什么地方?或者之前只是复制一下Application Surface的图像来做暂停画面?
2014年05月16日 05点05分
回复 亮透透 :Application Surface的用法和一般的表面是一样的。而自己创建一个表面,把会动的都画在自建的表面上,然后在Application Surface绘制之后来绘制那些
2014年05月16日 05点05分
回复 醉在秋杀 :唔这样就了解~ 虽然喵还是觉得稍微有点绕,不过功能上没问题了~
2014年05月16日 09点05分
回复 亮透透 :这是最不饶的一种方式,直指“底层”。不用创建一个新的表面,不用抓屏,不用创建新的Sprite来绘制。
2014年05月16日 11点05分
level 5
醉在秋杀 楼主
我的思路,来至于官方技术博文:Optimising The Draw Pipeline
可能是作者故意没有写绘制 Application Surface 之后进行一次清除,在理解了这个变量的意义后,对博文源码中Object0添加Draw_Start事件,并加入Draw_clear();实现手动清除一次表面。
https://www.yoyogames.com/tech_blog/61
2014年05月15日 12点05分 5
level 12
LZ凹凸吗?
这方法真不错!
2014年05月17日 03点05分 6
谁呀[鄙视]
2014年05月17日 15点05分
回复 autukill :!!!
2014年05月18日 03点05分
回复 blovestorm :=,=你说ZL呀[喷],我才是凹凸
2014年05月18日 07点05分
level 5
醉在秋杀 楼主
利用Application Surface,gms1.3或者EA版
详细的解说,之后再发文章
[无效] http://pan.baidu.com/s/1kTp47vL
2014年05月28日 12点05分 7
level 5
醉在秋杀 楼主
发现,Application Surface的绘制,还受到当前ROOM相关的参数的影响,导致不能正常“显示”(已解决)。
2014年05月30日 03点05分 8
1