广播消息

序列精灵可以在其长度的任何点生成所谓的广播消息。这些消息是简单的字符串,添加到动画时间线的特定帧中,当到达时间线中的那个点时,该字符串将广播给所有侦听它的实例。任何具有广播消息事件的实例(在"其他"事件类别中找到)将在时间线中到达消息字符串时接收该消息字符串,此时,您需要有一些代码来解析它并做出相应的反应。还要注意,序列也可以侦听广播消息,但这需要您首先使用代码设置侦听器方法(有关详细信息,请参阅GML中的序列事件和时刻一节)。

注意 将实例的 image_index 直接设置为帧将触发对象精灵的该帧上可能存在的任何广播消息。

添加广播消息到序列或精灵时间线,只需单击Broadcast Message Button Icon按钮这一点将打开一个对话框,您可以在其中添加要广播的消息:

Add A broadcast message to a sequence

添加后,消息将显示在"关键帧表"(或精灵帧视图)中。要编辑它,您必须单击鼠标右键RMB Icon在消息图标上打开与帧重叠的所有消息的列表(一个帧上只能有一条消息,但将多条消息放置在连续帧上会导致它们在视觉上重叠,从而使您更难选择所需的消息,您也可以在同一帧上看到一条消息和一个时刻),然后从列表中选择一个将打开消息对话框,您可以在其中编辑或删除它。

当触发广播消息事件时,将有一个特殊的DS映射创建并存储在内置变量event_data中。此变量ID是一个内置的全局范围变量,但仅在触发它的事件中包含DS映射数据-在这种情况下,广播消息事件将在所有其他时间返回-1。事件将具有的键如下:

消息事件结构
变量类型描述
event_typeString对于从序列发送的消息,这将是字符串"sequence event",对于从精灵发送的消息则是字符串"sprite event"。
messageString这包含已接收的消息字符串。
element_idLayer Element ID这包含触发消息的层元素(序列 / 精灵 / 实例)的 ID。然后,您可以使用此 ID 值来确定使用函数 layer_get_element_type() 生成消息的元素类型并根据需要使用其他相关功能来瞄准它,或执行诸如播放声音之类的动作。

注意,实例的广播消息事件将在每次发送广播消息时接收多个字符串。您不需要对所有广播进行操作,并且可以让不同的实例监听不同的广播字符串。但是,您可能有一个实例正在侦听可能同时收到的消息 当发生这种情况时,事件将被多次触发-每个消息字符串一次

以下是如何检查此事件的简单示例:

if event_data[? "event_type"] == "sequence event" // or you can check "sprite event"
{
    switch (event_data[? "message"])
    {
        case "hit":
            audio_play_sound(snd_hit, 0, false);
        break;

        case "destroy":
            sequence_destroy(event_data[? "element_id"]);
        break;
    }
}