GameMaker 日本語掲示板

【解決】インスタンス関数を他オブジェクトに変数として渡し、渡したオブジェクトから実行する方法 / 7

7 コメント
views
17 フォロー
7
asa 2021/09/08 (水) 02:31:28 修正

皆さんありがとうございます。

> そのままで動いた
空のプロジェクトで試したら実行できました!


> objectBでwith無しでabc();で動く
これもできました! with(objectA)要らないんですね!
あと変数abcに入れた関数はscript_execute(abc)じゃなくて直接abc();で動くんですね!


では、なぜ自分のプロジェクトでは動かないのか。
objectBを作る部分を関数にしているとエラーになることが分かりました。
質問を簡潔にしようと思って、関数内に書いている事実を省略していました。
実際は下記のようにして、player操作でhoge()を実行する形にしていました。
objectAのCreateイベント

function hello() {
   show_message("hello");
}

function hoge() {
   var _o = instance_create_depth(0, 0, 0, objectB);
   _o.abc= hello;
}

こうするとhoge()を実行するとエラーになります。
エラー:script_execute argument 1 unable to convert to integer, result is nan

インスタンス関数のスコープについてちゃんと理解できてないのかもしれません。
試しに、こうやってみました。
objectAのCreateイベント

function hello() {
   show_message("hello");
}
	
scr1 = hello; // ここで変数に入れる

function hoge() {
   var _o = instance_create_depth(0, 0, 0, objectB);
   _o.abc= scr1;
}

こうしたら動きました。
まだ勉強が必要なようです。

通報 ...