🏃

一括系send()はリレー式もアリ

2024/11/03に公開

親から複数の子に一括でsend()したい時に、回数制限とかで色々面倒だね。
そうだね、こういう回避方法もあるね。という記事です。

親のsend()が1回で済んでいる所がポイント

親がすべての子に向かってsend()するわけではなく、子が次の子にsend()します。
親側で制限が必要になるような数の場合を考えると結構早そう。

ItemHandle配列を乗っけてsend()する

子はItemHandleの配列からpop()し、それにsend()すればOK。
より速度を求めたり行き先を分岐させるとかなら、配列を多段にするとかで色々アレンジできそう。

具体的なコード

だいたいこんな感じになるかと思います。
動作確認してないので、雰囲気でお願いします!!!

//親側
$.onInteract(p => {
    const handles = $.getItemsNear($.getPosition(), Infinity);
    const next = handles.pop();
    const arg = {};
    arg.nexts = handles;
    arg.body = "送りたい情報の本体";
    next.send("broadcast", arg);
});
//子側
$.onReceive((messageType, arg, sender) => {
    if(messageType === "broadcast"){
        //arg.bodyを使ってあれこれ処理
        const next = arg.nexts.pop();
        if(next != null){
            next.send("broadcast", arg);
        }
    }
});

それでは良きsend()ライフを!!!!

Discussion