スクリプトのエラーが起きた場合の初心者なりに原因と対策を調べる方法~♪
スクリプト導入でエラーが出る人や、手探りで書いてみてエラーが出る人の参考になれば。
あくまで私の知識と経験則に基づいているのと
ツクール始めたての人には流石に難しいかもしれない
という2点は先にお断りしておきますね。
まずはその豪腕でエラーの7割を叩き出すと言われている(当者調べ)
エラー界の安打製造機ことNoMethodError(ノーメソッドエラー)さんです。
スクリプト'どこそこ'の00行目でNoMethodErrorが発生しました。
undefined method 'なんたら' for nil:NilClass
ノーメソッドの名の通り、こいつが主張しているのは
「メソッドを呼び出せって命令されたけども、そんなメソッドないアルヨ」
ってことです。
だからエラーメッセージの「どの箇所で呼び出されたか」「何というメソッドを呼び出した」
という情報がとても大事になります。
メソッドというのは簡単に言えばdef~という部分のことですが
このエラーが指すのはそれだけじゃなくて「変数の呼び出し」も含みます。
また同じくNameErrorというのもこいつの兄弟みたいなものなので、まとめて扱います。
(原義はともかく、この2つの違いは書き方によるもので殆ど誤差ですから)
原因を探すときにはCtrl+Shift+Fの全検索を活用しましょう。
エラー箇所が○○.××.△△とドットで続いている場合は最後の△△だけを検索します。
'Game_Interpreter'の1409行目時に「'Game_Interpreter'の1409行目」でエラーが起きます。
これはイベントコマンドのスクリプトを使ってエラーを起こしたということです。
この場合、該当箇所を見てもeval(script)とあってエラーが特定できません。
イベントコマンドを調べなおし、エラーが起きたときに呼び出したメソッドを探すようにします。
原因その1「スペルミス」さていきなりズッコケな原因ですが、実は一番ありえるミスです。
明らかに英単語をスペルミスしている場合や
上下のメソッド名を確認したり、全検索をかけて
「その名前は他に使われていない」「似ている名前が頻繁に使われている」などは特に疑うべきです。
また複数形のsが曲者で、これは日本人にとっては付け忘れやすい上に
actorとactorsなどは両方別々に使われている為ややこしいです。(作者からすると使い分けに便利なので)
他には_(アンダーバー)と-(ハイフン)は取り違えや省略がおきやすいです。
確実に見つける方法はありませんが、念頭においておくと発見しやすいでしょう。
原因その2「メソッドがない」通常、素材配布しているようなスクリプトなら
メソッドそのものを作り忘れるという大ポカをやる人は
少ないです。
ですが、前提スクリプトやベーススクリプトを指定していることは多く
それらを入れ忘れてしまうとメソッドがない事態も発生します。
原因その3「そのメソッドと関係がない」呼び出せるメソッドは自分のクラスが持っているものか
そのスーパークラスに設定されているクラスのものだけです。
例えばGame_ActorはGame_Battler(親)のメソッドを呼び出すことはできますが
Game_Enemy(兄弟)だけが持っているメソッドを呼び出すことはできません。
配列に使うメソッドを文字列には使えませんし、その逆もしかりです。
良く使われるようなメソッド名は被ることが多いので
「○○が使えたから××も同じように使えるはず」という感じで失敗することが多いです。
さて、第一回はこの辺で終了です。
基本的にこの3つが主な原因と言えるでしょう。
第二回では他の原因も挙げつつ、具体的な調べ方を紹介します。
[4回]
PR
-->