ページ 11

【解決済み】スクリプトについてお聞きします。

Posted: 2018年1月08日(月) 10:24
by にゃたま
こんにちは。

スクリプトに詳しい方にお聞きします。
Game_InterpreterクラスからScene_Map.prototype.[関数名] = function()
の関数を呼びたいのですが$gameMap.[関数名]();から呼ぼうとすると
undefined is not a functionになってしまいます。

Game_Interpreterクラスの下にScene_Map.prototype.[関数名] = function()
を定義しておりそれを実行したいと考えます。
Scene_Mapは$gameMapから呼ぶことはできないのでしょうか?

Re: スクリプトについてお聞きします。

Posted: 2018年1月08日(月) 11:01
by ツミオ
こんにちは。
詳しくはありませんが、わかる範囲でお答えします。

$gameMapはGame_Mapクラスのインスタンスです。
各シーンのインスタンスはSceneManager._sceneに保持されています。
したがって、SceneManager._scene.[関数名]()とすることで、望みの動作をおこなえるかなと思います。

ですがSceneManager._sceneは「現在のシーンのインスタンス」を保持しているため、マップ以外のシーンでマップ用の関数を呼ぶとエラーが発生するか、想定していない動作をおこなうことになります。
安全面を考慮するなら、何らかの方法で型の判定をした方がよいかなと思います。

具体的な方法は僕のブログでも紹介しています。
http://ntgame.wpblog.jp/2017/09/04/post-844/
また、詳細は省略しますが、特殊な関数名を使用しているならダックタイピングも有効かなと思いました。
興味があれば調べてみてください。

Re: スクリプトについてお聞きします。

Posted: 2018年1月08日(月) 11:21
by にゃたま
ツミオ様
ツミオ さんが書きました: $gameMapはGame_Mapクラスのインスタンスです。
各シーンのインスタンスはSceneManager._sceneに保持されています。
したがって、SceneManager._scene.[関数名]()とすることで、望みの動作をおこなえるかなと思います。
ありがとうございました!いままで悩んでいたことがウソのように解決しました。
聞いてよかったです!結構単純なことだとはわかっていましたがわからないと永遠と考え続けてしまって…
イベント中に当該関数を実行したいと考えていたのでマップ画面から呼び出しています。
なのでエラーとかなく問題ありませんでした。
シーン判定とか勉強になりました。紹介していただいたブログはあとでゆっくりと参照させていただきます。