よくあるエラー集
最終投稿者: 井戸乃博士
更新:2013/11/10 06:35:52
よくありそうなエラーの例をまとめました。
エラーが出たときは、すぐに質問するのではなく、
ここで該当するエラーが無いか調べるといいでしょう。
※エラーの調べ方
エラーが発生したら、まずエラー表示を見て内容を確認しましょう。
エラー表示の内容は次のようになっています(2DアクションRPG/2DRPGの場合)
上記の(1)と(2)から、どのイベントでエラーが出ているかがわかります。
(3)は定型化されたメッセージなので、正直見てもよく分からないことがありますが、
メッセージによっては原因がすぐに分かる場合もあります。
なお、こちらにエラー表示の一覧があります。
どんなエラーが出ているのか目安になりますので、調べてみるといいでしょう。
(4)からイベントエディタでスクリプトのどこにエラーが発生しているのか見当をつけることができます。
行数が何百行にもなる場合、いちいち行数を数えられない!と言う方、
イベントエディタに行数を表示する場所がちゃんとあります。
これでエラー箇所を特定してください。
質問する際は、あらかじめスクリプトのどこにエラーが発生しているのか
自分で把握して伝えられるようにしておくようにしましょう。
質問の際に、回答者の方に何行目にエラーがあるのか調べてもらうのはお勧めしません。
なぜなら、回答者の方には、それこそスクリプトを目で見て数えるしか方法が無いからです。
余計な手間をかけさせることになるので、前もって自分で調べておいた方が効率的なのです。
よくあるエラーの一覧
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
《全般》
・スペルミス
【解説】
よくあるケースは次の2つです。
(1)スクリプトの綴りが間違っている。
(2)大文字を小文字にしている
当然スクリプトは動作しません。
質問して原因がこれだと非常に恥ずかしいですが、
複雑なスクリプトになるほど、このようなケアレスミスは起こりやすいです・・・
【対処法】
英語の知識に関係なく、長いスクリプトになるほどミスが起こりやすくなります。
『「関数リファレンス」は別タブで常時開きっぱなしで作業するのが基本』
という名言を言った人がいます。
特に文字数が多いスクリプトはコピペするようにした方が間違いが減りますよ。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
・スクリプトの括弧が多すぎる/少なすぎる
【解説】
初歩的ですが、これもやりがちなミスです。
特にミスが起こりやすいのは、スクリプトの中に別にスクリプトを入れた場合。
例えば、"setEventDirection("x", getDownDirection())"
"getValueFromItemParam(getItemParamWithId(x), getItemViewNameIndex())"等、
括弧が二重三重になり、長いスクリプトは特に要注意。
途中で改行したりすると、さらに見落としやすくなります。
【対処法】
スクリプトが複雑になると発生率が高くなるミスなので、
解説に挙げたようなスクリプトを作るときは、意識しておくといいでしょう。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
・全角スペースが混ざっている
【解説】
全角スペースは日本語フォントと同じ扱いですから、スペースとして認識されません。
スクリプトの途中に全角スペースがあるとエラーとなります。
speakのセリフを入力しているときに半角に戻すのを忘れるなどして発生します。
【対処法】
スクリプトをよく見直しましょう。
スクリプトの途中に全角スペースがある場合、
入力時に下に赤い線が出て、エラーであることが分かります。
(下の図を参照)
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
《変数・フラグ関連》
・変数が定義されていない。
【解説】
変数は値を設定しなければ、変数として機能しません。
最初に、ローカル変数なら、"a = 1"
基本変数なら、"setVariable("a" 1)"
というように値を設定しなければなりません。
これを忘れると、変数は値を持たないため特定できない状態になります。
(この状態を"null"といいます)
この状態でgetVariable("a")など、変数を指定するスクリプトを使うとエラーになります。
"not defined variable"というエラーメッセージがでるので、すぐに分かります。
【対処法】
手順1:
最初にsetVariable等、変数を設定するスクリプトがあるかどうか確認しましょう。
手順2:
もし、ちゃんと設定されていたら・・・
変数にスペルミスがある可能性が高いです。
スペルが間違っているせいで、別の変数と認識されているわけですね。
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
《if関連》
・「if (変数) = (値)」と表記している
【解説】
変数が一定の値の場合(例えば a=1の場合)に
特定のイベントを発生させるというスクリプトを書くときは、
"a == 1" というようにイコールを2つ並べて書かなければなりません。
【対処法】
分かれば、すぐに直せる初歩的なエラーですが、
知識がないと、対処のしようがありません。
ifのような条件式は書き方が決まっています。
具体的な書き方はこちらの『条件式』の項目を参照してください。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
・end の数が少ない/多い
【解説】
ifを使う場合、最後に必ず"end"と書く必要があります。
"if"を入口とすると"end"は出口で、両方そろっていないとifの対象範囲が決まりません。
このため、endで「閉じる」という言い方をする人もいます。
endが多くても少なくてもエラーが出ます。
他に最後を"end"で閉じるスクリプトとして、"case (when)"と"while"があります。
"if"、"case(when)"、"while"は"end"が必要と、覚えておきましょう。
この3つのスクリプトは使用頻度が高く、しかも一緒に使うことが多いため、
"end"の書き方で混乱してエラーになるケースが非常に多いです。
【対処法】
エラーが出たら、"if"、"case"、"while"の数と、"end"の数が合っているか確認しましょう。
3つのスクリプトをどれかを複数使っていたり、組み合わせて使っていたりした場合、
"end"との対応関係が分かりにくくなります。
混乱しないように、スペースを使ってスクリプトの位置関係を把握するようにしましょう。
(下の図を参照)
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
ツイート
エラーが出たときは、すぐに質問するのではなく、
ここで該当するエラーが無いか調べるといいでしょう。
※エラーの調べ方
エラーが発生したら、まずエラー表示を見て内容を確認しましょう。
エラー表示の内容は次のようになっています(2DアクションRPG/2DRPGの場合)
上記の(1)と(2)から、どのイベントでエラーが出ているかがわかります。
(3)は定型化されたメッセージなので、正直見てもよく分からないことがありますが、
メッセージによっては原因がすぐに分かる場合もあります。
なお、こちらにエラー表示の一覧があります。
どんなエラーが出ているのか目安になりますので、調べてみるといいでしょう。
(4)からイベントエディタでスクリプトのどこにエラーが発生しているのか見当をつけることができます。
行数が何百行にもなる場合、いちいち行数を数えられない!と言う方、
イベントエディタに行数を表示する場所がちゃんとあります。
これでエラー箇所を特定してください。
質問する際は、あらかじめスクリプトのどこにエラーが発生しているのか
自分で把握して伝えられるようにしておくようにしましょう。
質問の際に、回答者の方に何行目にエラーがあるのか調べてもらうのはお勧めしません。
なぜなら、回答者の方には、それこそスクリプトを目で見て数えるしか方法が無いからです。
余計な手間をかけさせることになるので、前もって自分で調べておいた方が効率的なのです。
よくあるエラーの一覧
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
《全般》
・スペルミス
【解説】
よくあるケースは次の2つです。
(1)スクリプトの綴りが間違っている。
(2)大文字を小文字にしている
当然スクリプトは動作しません。
質問して原因がこれだと非常に恥ずかしいですが、
複雑なスクリプトになるほど、このようなケアレスミスは起こりやすいです・・・
【対処法】
英語の知識に関係なく、長いスクリプトになるほどミスが起こりやすくなります。
『「関数リファレンス」は別タブで常時開きっぱなしで作業するのが基本』
という名言を言った人がいます。
特に文字数が多いスクリプトはコピペするようにした方が間違いが減りますよ。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
・スクリプトの括弧が多すぎる/少なすぎる
【解説】
初歩的ですが、これもやりがちなミスです。
特にミスが起こりやすいのは、スクリプトの中に別にスクリプトを入れた場合。
例えば、"setEventDirection("x", getDownDirection())"
"getValueFromItemParam(getItemParamWithId(x), getItemViewNameIndex())"等、
括弧が二重三重になり、長いスクリプトは特に要注意。
途中で改行したりすると、さらに見落としやすくなります。
【対処法】
スクリプトが複雑になると発生率が高くなるミスなので、
解説に挙げたようなスクリプトを作るときは、意識しておくといいでしょう。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
・全角スペースが混ざっている
【解説】
全角スペースは日本語フォントと同じ扱いですから、スペースとして認識されません。
スクリプトの途中に全角スペースがあるとエラーとなります。
speakのセリフを入力しているときに半角に戻すのを忘れるなどして発生します。
【対処法】
スクリプトをよく見直しましょう。
スクリプトの途中に全角スペースがある場合、
入力時に下に赤い線が出て、エラーであることが分かります。
(下の図を参照)
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
《変数・フラグ関連》
・変数が定義されていない。
【解説】
変数は値を設定しなければ、変数として機能しません。
最初に、ローカル変数なら、"a = 1"
基本変数なら、"setVariable("a" 1)"
というように値を設定しなければなりません。
これを忘れると、変数は値を持たないため特定できない状態になります。
(この状態を"null"といいます)
この状態でgetVariable("a")など、変数を指定するスクリプトを使うとエラーになります。
"not defined variable"というエラーメッセージがでるので、すぐに分かります。
【対処法】
手順1:
最初にsetVariable等、変数を設定するスクリプトがあるかどうか確認しましょう。
手順2:
もし、ちゃんと設定されていたら・・・
変数にスペルミスがある可能性が高いです。
スペルが間違っているせいで、別の変数と認識されているわけですね。
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
《if関連》
・「if (変数) = (値)」と表記している
【解説】
変数が一定の値の場合(例えば a=1の場合)に
特定のイベントを発生させるというスクリプトを書くときは、
"a == 1" というようにイコールを2つ並べて書かなければなりません。
【対処法】
分かれば、すぐに直せる初歩的なエラーですが、
知識がないと、対処のしようがありません。
ifのような条件式は書き方が決まっています。
具体的な書き方はこちらの『条件式』の項目を参照してください。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
・end の数が少ない/多い
【解説】
ifを使う場合、最後に必ず"end"と書く必要があります。
"if"を入口とすると"end"は出口で、両方そろっていないとifの対象範囲が決まりません。
このため、endで「閉じる」という言い方をする人もいます。
endが多くても少なくてもエラーが出ます。
他に最後を"end"で閉じるスクリプトとして、"case (when)"と"while"があります。
"if"、"case(when)"、"while"は"end"が必要と、覚えておきましょう。
この3つのスクリプトは使用頻度が高く、しかも一緒に使うことが多いため、
"end"の書き方で混乱してエラーになるケースが非常に多いです。
【対処法】
エラーが出たら、"if"、"case"、"while"の数と、"end"の数が合っているか確認しましょう。
3つのスクリプトをどれかを複数使っていたり、組み合わせて使っていたりした場合、
"end"との対応関係が分かりにくくなります。
混乱しないように、スペースを使ってスクリプトの位置関係を把握するようにしましょう。
(下の図を参照)
例えば、左のように"case"の下に"if" "if"の下に"while"が来るスクリプトがあったとします。 この場合、下に来るスクリプトは、 endを使って、上のスクリプトに囲まれるような 構造になります。 つまり、上に来るスクリプトに対応する"end"は、 下の方に来ることになります。 したがって"end"の順番は、上から順に、 "while"→"if"→"case"となります。 |
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
コメントする
コメントするには、ログインする必要があります。
コメント一覧
コメントはありません。