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

アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

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

投稿記事by にゃたま » 2018年1月08日(月) 10:24

こんにちは。

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

Game_Interpreterクラスの下にScene_Map.prototype.[関数名] = function()
を定義しておりそれを実行したいと考えます。
Scene_Mapは$gameMapから呼ぶことはできないのでしょうか?
最後に編集したユーザー にゃたま on 2018年1月08日(月) 11:21 [ 編集 1 回目 ]

アバター
ツミオ
記事: 83
登録日時: 2017年4月02日(日) 13:46
連絡を取る:

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

投稿記事by ツミオ » 2018年1月08日(月) 11:01

こんにちは。
詳しくはありませんが、わかる範囲でお答えします。

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

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

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

有償の依頼も募集中。
今まで有償で制作したものは実績をご覧ください。
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

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

投稿記事by にゃたま » 2018年1月08日(月) 11:21

ツミオ様

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


ありがとうございました!いままで悩んでいたことがウソのように解決しました。
聞いてよかったです!結構単純なことだとはわかっていましたがわからないと永遠と考え続けてしまって…
イベント中に当該関数を実行したいと考えていたのでマップ画面から呼び出しています。
なのでエラーとかなく問題ありませんでした。
シーン判定とか勉強になりました。紹介していただいたブログはあとでゆっくりと参照させていただきます。

“MV:質問” へ戻る