Collision した Actor からデータをもらう
Actor A と Actor B で Collision した場合に、B から A にデータを受け渡すというケースです。以下の 2 つを例にしてみます。
- Actor B から A に
send
する- A が B に Collision した時に、 B 側から A にメッセージを送る形でデータを渡します
- Actor B の custom variable から取得する
- A が B に Collision した時に、A が B を参照し、custom variable の値を読み出す形でデータを受け取る
Actor B から A に send
する
Actor B
Damage とかとだいたい同じです。
Send Any Message の CODE
export const PROPS = [ propCardTargetActor("Target", { label: "Send to:" }) ]; /** * @param {GActionMessage} actionMessage */ export function onAction(actionMessage) { const target = getCardTargetActor("Target", actionMessage); if (!target) { return; } send(target, "ReceiveAnyMessage", "送りたいデータ"); }
Actor A
単に send あれたイベントを Receive するだけだとデータが取れないので、以下のようなイベントを作成します。
まず、Receive Any Message CARD です。
もともとの ReceiveMessage CARD の CODE では card.triggeredEvent
は {}
が入っていて、後続の Action に値を渡せません。よって、以下のように onReceiveAnyMessage
で渡ってきた値をそのまま渡しています。
/** * @return {GEvent|undefined} The event, if one occurred. */ export function onCheck() { if (card.triggeredEvent !== undefined) { const rv = card.triggeredEvent; delete card.triggeredEvent; return rv; } else { return undefined; } } export function onReceiveAnyMessage(properties) { card.triggeredEvent = properties; } export function onResetGame() { delete card.triggeredEvent; }
次に Say Message CARD です。Say Something CARD とほぼ同じなので、受け取ったデータをどう取り出すかだけ。
export function onAction(actionMessage) { const receivedData = actionMessage.event; }
Actor B の custom variable から取得する
Actor A
custom variable は他の actor からも読めるので、それを利用します。
逆にどの actor からも読めてしまいます
一つ目の例と同じように Collision Event と組み合わせた場合の Action 側の CARD の CODE です。
export const PROPS = [ propCardTargetActor("Target", { label: "Receive from:" }) ]; /** * @param {GActionMessage} actionMessage */ export function onAction(actionMessage) { const target = getCardTargetActor("Target", actionMessage); if (!target) { return; } const receivedData = getVar('受け取りたいデータの key', target) }
Actor B
渡すデータをあらかじめ設定しておきたいとします。
GAME START panel で設定するような Action の CARD を用意します。
export function onAction() { setVar('渡したいデータの key', '渡したいデータ'); }
setVar
に関しては object も渡せます。
http://gamebuilder.area120.com/setVar.html
props を使って、CARD の properties として setVar
に渡す値を設定できるようにしてもよさそうです。