スクリプトのエラーが起きた場合の初心者なりに原因と対策を調べる方法~♪
スクリプト導入でエラーが出る人や、手探りで書いてみてエラーが出る人の参考になれば。
あくまで私の知識と経験則に基づいているのと
ツクール始めたての人には流石に難しいかもしれない
という2点は先にお断りしておきますね。
最後は頻度こそ低いものの見かけることはそれなりにある
所謂モブキャラであるその他のエラーさん達です。
NameErrorネームエラー。
定義されていないローカル変数や定数を呼び出した際に出ます。
この説明、どこかで見た気がしませんか?これはNoMethodErrorの親戚です。
その4と同じ原因で起きます、対処法も一緒。
メソッドっぽい書き方か、ローカル変数っぽい書き方かを判断して
「メソッドか、ローカル変数が未定義」つ(NoMethodError)
「ローカル変数か、メソッドが未定義」つ(NameError)
と出してくる。って結局は分からないのかよ!
ラーメン(チャーハン付き)とチャーハン(ラーメン付き)の違いです。
定数の場合は大文字から始まるって決まりがあるので
自信を持ってNameErrorを出してくれるぞ。やる事は一緒だけど。
ArgumentErrorオーグメントエラー。
引数エラーという言い方が分かりやすいですかね。
イベントコマンドでスクリプト命令を書かせるような素材にありがちですが
例えばabc(1, 3)というような形で指示されているものをabc(1)と書くとこれが出ます。
この()の中身が引数(ひきすう)で、これは省略可能な場合とそうでない場合があります。
仕組みが気になるならdef abcというメソッドを探せば良いです。
def abc(x, y)
というような形である場合、引数は2つで省略は不可能です。
def abc(x = 0, y = 0)
というように=が入っている場合、その引数は省略可能(=の値が代わりになる)です。
SystemStackError システムスタックエラー。
これが起きる理由は基本的に無限ループに入ったときです。
イベントでもループやジャンプ、条件分岐を間違えると無限ループになるように
それと同じ理由で無限ループを起こしてしまう可能性は勿論あります。
それともう1つ、導入の際に起きるミスで「alias(エイリアス)が被る」ケースがあります。
エイリアスはスクリプト同士の競合を防ぐために導入されることが多いですが
同じエイリアスが2つあると、基本的に無限ループを形成してしまいます。
(エイリアスの問題というより、エイリアスを利用した競合回避方法の問題です)
私を含めて多くの製作者が自分の名前をつけたり詳しい名前をつけることで
この手の衝突は避けるようにしていますが稀にalias abc2 abcのように簡易に済ますこともあり
またユーザーがうっかり二重に導入している場合などもあるので
システムスタックエラーが出た場合はそれらを探してみる必要があります。
ZeroDivisionError ゼロディヴィジョンエラー。ゼロ除算エラーと呼びます。
ゼロ除算というのは読んで字の如く0で割ることで、これはやってはいけません。
まず普通に/0をするのが駄目ですが、例えば/abcという式を作っていて
abcに0が入る可能性がある場合も0のときにエラーになってしまうので良くないです。
Aceの場合、戦闘計算式はエラーではなく計算結果を0にすることで回避します。
なので何故かダメージが0になる場合はこちらもゼロ除算を疑ってみるべきです。
ゼロ除算の対処法ですが、最も簡単なのはmaxメソッドを利用する方法です。
[1,abc].max
[1,(abc-xyz)].max
maxメソッドを使って1と比較することにより、1未満の場合は1に置き換わります。
変数やステータスに対してだけでなく、()を使うことで計算式にも使えます。
もし計算式で除算を使いたい場合は検討してみると良いでしょう。
[7回]
PR
-->