GameMaker Studio - 非现有曲面

时间:2015-06-06 14:05:53

标签: debugging error-handling game-maker

我目前正在整理我在GameMaker Studio中创建的引擎。目前,我正在为我的引擎添加阴影和平滑效果。

当我添加这些阴影时,我遇到了一个问题,并且能够将问题缩小到一行代码:

window_set_size(width, height);

我将宽度设置为1024,将高度设置为600.但这不是问题。问题是,当我运行/调试我的游戏时,我以某种方式调用了下面所述的错误:

ERROR in
action number 1
of  Step Event2
for object oGame:

Trying to use non-existing surface.
at gml_Script_lsys_update (line 58) -
   draw_surface_ext(global._lsys_light_surface[i], global._lsys_light_xpos[i] - global._lsys_light_radius[i], global._lsys_light_ypos[i] - global._lsys_light_radius[i], 1, 1, 0, global._lsys_light_color[i], 1);  
----------------------------------------------------------------------------    
stack frame is
gml_Script_lsys_update (line 58)
called from - gml_Object_oGame_StepEndEvent_1 (line 1) - lsys_update(alpha);

非常松散地 相信这意味着,在我的窗口表面绘图,不知何故与设置实际窗口本身的分辨率发生冲突。我还在下面的错误日志中包含了您正在阅读的脚本和命令:

lsys_update

draw_surface_ext(global._lsys_light_surface[i], global._lsys_light_xpos[i] - global._lsys_light_radius[i], global._lsys_light_ypos[i] - global._lsys_light_radius[i], 1, 1, 0, global._lsys_light_color[i], 1);

全局变量

global._lsys_lights = 0;
global._lsys_casters = 0;
global._lsys_quality = max(10/max(room_width, room_height), argument0);
global._lsys_surface = surface_create(room_width * global._lsys_quality, room_height * global._lsys_quality);

oGame End-Step Event

lsys_update(alpha); // Alpha is set to an Integer value of 0.5
surface_reset_target();

我是如何消除此错误并修复游戏的?

任何帮助都会 赞赏。如果您需要更多信息,请发表评论。

1 个答案:

答案 0 :(得分:2)

请记住在使用surface_exists之前检查曲面是否仍然存在,如果它已从内存中消失,请再次创建它。

来自documentation

  

首先,您应该意识到表面(应用程序表面除外)是“易变的”。这意味着如果设备或窗口失去焦点或被最小化(很好的例子是当Windows中出现屏幕保护程序时,或者当应用程序因调用而失去焦点时在Android设备上出现),则表面可能会被破坏。这是因为它存储在纹理存储器中,并且当目标平台需要该存储器用于其他内容时可能会被覆盖,这意味着您应该始终具有某种类型的故障安全代码,通常是surface_exists函数。