有各种 GML 函数可用于创建、修改和删除房间内图层中的滤镜/效果,使您能够轻松实时管理效果,以创建逼真的和动态的滤镜/效果。
请注意,目前只有两种方法可确保GameMaker在游戏中加载特定过滤器/效果:
这意味着要在运行时使用特定的过滤器/效果,必须首先将其添加到房间(因此 GameMaker 知道要使用它),或者在fx_create()调用中明确指定。
后一种方法(在代码中指定filter/effect)只与函数参数中直接指定的stringliterals一起工作,这意味着如果您使用变量或任何逻辑生成filter/effect名称字符串,则资源编译器将不检测该字符串,并且不会加载filter/effect。
请参考以下示例:
// This will work on its own
var _fxshake = fx_create("_filter_screenshake");
// This will NOT work on its own
var _myfilters = { screenshake: "_screenshake" }
var _filter_to_use = "_filter" + _myfilters.screenshake;
var _fxshake = fx_create(_filter_to_use);
为确保后一种方法有效,您只需将过滤器添加到项目中的至少一个房间,或者确保fx_create()在项目中的任何地方被调用,该过滤器名作为字符串常量(而不是变量)。
使用滤镜 / 效果时需要记住一些限制:
以下函数用于创建和管理包含效果数据的"FX结构":
以下函数用于通过使用FX结构修改可能包含过滤器/效果的层:
您可以通过执行以下操作在运行时修改过滤器/效果:
下面是上面提到的工作流的示例代码:
创建事件
// Store the FX struct, and its parameters struct, in variables
pixelate_fx = layer_get_fx("Effect_1");
pixelate_fx_params = fx_get_parameters(pixelate_fx);
步事件
// Change param as variable
pixelate_fx_params.g_CellSize = round((mouse_x / room_width) * 64);
// Or, change param as string
pixelate_fx_params[$ "g_CellSize"] = round((mouse_x / room_width) * 64);
// Apply updated parameters struct to the FX struct
fx_set_parameters(pixelate_fx, pixelate_fx_params);
外汇类型 参数页列出了所有筛选器/效果及其运行时参数。
可以通过以下三种方式使用运行时参数名称(以参数" g_CellSize"为例):
默认情况下,滤镜/效果应用于分配给的层以及该层下的所有层,但是,您可以使用fx_set_single_layer()为筛选器/效果启用单层模式,以确保仅将其应用于指定给的层。
下图显示了将一个过滤器应用于多个层(这是所有FX层的默认行为),然后显示启用了单层模式并应用于非FX层的相同过滤器:
也可以使用检查器在"房间编辑器"中使用 SingleLayer 效果。