surface_set_target

通过此函数,您可以将所有进一步绘制设置到目标表面而不是屏幕,这样您就可以告诉 GameMaker 仅将特定内容绘制到指定表面。

请注意,如果您完成后不调用 surface_reset_target,则屏幕上不会绘制任何内容,因为所有进一步的绘制 (即使在其他情况下) 都将在表面上完成。您还应该意识到,如果在实例的绘制事件中没有在屏幕上绘制表面本身,则什么也看不到。您也可以检查此函数的返回值作为调试工具来检查表面目标是否设置,返回值 0 表示设置目标失败,任何其他正值表示成功。

需要注意的一点是,表面是层叠的,因此不能从一个目标跳到另一个目标,然后在结束时重置为法线绘制目标,而是必须打开并关闭渲染目标。例如,这将导致无法正常工作:

surface_set_target(surf1);
draw_text(32, 32, "surface1");
surface_set_target(surf2);
draw_text(32, 64, "surface2");
surface_reset_target();

相反,您必须为您设置的每个表面重置目标,就像您必须对代码块使用左括号和右括号 { } 一样。所以上面的内容应该这样写:

surface_set_target(surf1);
draw_text(32, 32, "surface1");
surface_reset_target();
surface_set_target(surf2);
draw_text(32, 64, "surface2");
surface_reset_target();

或者像这样:

surface_set_target(surf1);
draw_text(32, 32, "surface1");
surface_set_target(surf2);
draw_text(32, 64, "surface2");
surface_reset_target();
surface_reset_target();

注意 如果您之前没有使用函数 surface_set_target 设置渲染目标,则使用此函数将静默 (即没有任何错误消息) 结束该函数的所有进一步代码执行事件。

 

语法:

surface_set_target(surface_id);

参数类型描述
surface_idSurface设置为绘图目标的表面。

 

返回:

Boolean Whether the render target was set successfully

 

例子:

if (view_current == 0)
{
    surface_set_target(surf);
    with (obj_Effect)
    {
        draw_self();
    }
    surface_reset_target();
}
else
{
    draw_surface(surf, 0, 0);
}

上面的代码检查当前正在绘制哪个视图,如果是 view[0],则会将绘制目标设置为表面并绘制对象 obj_Effect 的所有实例,然后再次重置绘制目标。如果视图不是 view[0],则表面将绘制到屏幕上。