プレイ日記
shoum shoma64
これを実行して、画面をタッチすると、なぜか 30行目で「illegal function call」と出るのですがなぜでしょうか?回答よろしくお願いします
1そうだね
プレイ済み
返信[1]
親投稿
すぎのは SUGINOHA
spofsの前にprint mob;" ";mob1x[mob];" ";mob1y[mob] とか入れたりして変数の内容などを調べて原因を絞っていったらどうでしょう。
0そうだね
プレイ済み
返信[2]
親投稿
otta777 otta777a
26行目から31行目までの間でFOR~NEXTでループ変数にMOB1を 使っていますよね。28行目でGOSUB @MOB1としていますがその先の FOR~NEXTでもループ変数にMOB1を使っているためにMOB1の値が 91になって帰ってきます。 その後にSPOFS MOB1~とするとSPSETをしていないスプライトに SPOFS命令を実行するためにIllegal function callとなります。
1そうだね
プレイ済み
返信[3]
親投稿
すでに回答があるとおりの原因でエラーが起きているので、ループ変数名をサブルーチンごと変更するか、ロジック的にそれぞれのサブルーチンで本当にループが必要か(呼出時点のMOB変数の値をサブルーチン先で使いまわせないか、FORをぬけたあとでも呼べるか)を検討するといいかもです。 ちなみに39行目の IF THEN のあとに NEXTがあって、41行目にもNEXTがあるので、 一応これでも動いてるかもしれないですが、FORとNEXTは1対1にしておいたほうが、コードが入り組んだときの思わぬ原因不明バグに陥るのを防げたりします。 ながれからこんな感じになるかなと。 FOR CHKMOBCNT=0 TO 90 IF xx THEN MOBX[xx]=xxx IF xx THEN S[CHKMOBCNT]=1 ELSE GOSUB @MOB1VSCPU1 ENDIF NEXT
0そうだね
プレイ済み