プレイ日記
ケイン KEIN.HORGAN
シンプルRPG製作日記 5日目 BUTTON()の罠 昨日はSOLID GUNNERをやっていたら、日記を書く時間がなくなっていました。 うーん、こわい!
3そうだね
プレイ済み
返信[1]
親投稿
ケイン KEIN.HORGAN
それはさておき。 今回は、修正プログラムとして、2枚の画像を添付します。 (30行目、40~44行目が修正、48行目からが新規追加分です)
0そうだね
プレイ済み
返信[2]
親投稿
ケイン KEIN.HORGAN
1.前回追加分のコードの修正 前回は6つの命令を組み合わせて、メッセージ送り用のカーソル表示を実装したわけですが… そのコードに、ちょっとだけやろうと思っていた事と違う結果になってしまうコードが含まれてしまっていたので、修正しておきます。 それは、30行目の FOR I=0 TO 100 の部分です。
0そうだね
プレイ済み
返信[3]
親投稿
ケイン KEIN.HORGAN
コードを見てもらえれば何となく想像出来るかもしれませんが、本来はカーソル点滅を 50*2 = 100 ループ毎に行おうと思っていました。 が、このコード、実は101ループで1セットになってしまっています。 (I=0 からI=100 までやるので、0,1,2,3...99,100 が繰り返される。つまり101個) これは、「TO 99 で終わる」か、「I=1 から始める」かのどちらかで修正できますが、今回は「TO 99で終わる」つまり、「I=0」の部分はそのままにしておく事にします。 (その為、I のカウントを-1 にする条件も I==99 に修正します) ※I=0 で始める理由は後述します。
0そうだね
プレイ済み
返信[4]
親投稿
ケイン KEIN.HORGAN
2.メッセージ送りでA ボタンを押した時の処理を実装します。 まずは、メッセージ欄をクリアします。 メッセージ欄は5行ありますが、各行を空白で埋め尽くせば文字が消えたように見えます。 FOR 文を使ってこの作業を実装したのが、 画像31行目からになります。 33行目を見てもらえれば分かりますが、この繰り返しでは、LOCATE 文のY座標指定を「開始行 + ○」という形で指定しています。 こういう書き方が出来るのが「I=0」で開始した時の利点の一つです。
0そうだね
プレイ済み
返信[5]
親投稿
ケイン KEIN.HORGAN
さて、メッセージを削除したら、新しいメッセージを表示させます。 これは簡単な話で、最初にメッセージを表示した時と同じようにLOCATE 文とPRINT 文を使います。 メッセージを表示したら、また先ほどと同じように、カーソルを点滅表示させます。 プチコン3号では、複数行のコピー&ペーストが非常に簡単に出来るようになっているので、こういう時は便利です。 ここまで出来たら、試しに実行してみるとします。 (ちょくちょく実行すると、何か間違いがあるときにすぐに発見出来ます。 日記には書いていませんが、ここまで作るまでに何十回も実行してみています)
0そうだね
プレイ済み
返信[6]
親投稿
ケイン KEIN.HORGAN
……多くの人が何かおかしな事になったと思います。 モンスターが移動する度に増殖してしまう事と同じように、今回のプログラムにもバグが含まれてしまっていました。 しかしながら、今回は前回と異なり、何が原因か分からない人も多いと思います。 (かく言う自分も、この現象に最初に遭遇した時はちょっと悩んでしまいました) 結論から言うと、58行目~60行目のように、VSYNC の位置を調整する事で対処出来ました。
0そうだね
プレイ済み
返信[7]
親投稿
ケイン KEIN.HORGAN
原因については、明記してある資料は見つからなかったのですが…… VSYNC で少し処理を遅らせる事で問題解決した事を考えるに、BUTTON()命令は、ボタンを押したり離したりした瞬間だけでなく、ほんの僅かな誤差(?)があるのだと思われます。 (※どこにもこんな事は書いていないみたいなので、これが正しいかどうかは知りません)
0そうだね
プレイ済み
返信[8]
親投稿
ケイン KEIN.HORGAN
さて、前回の次回予告の際「GOSUB」もやると言っていたような気もしますが…… 思ったより長くなってしまったので、今日はここまでにします。 (まさかバグが発生するとは思ってなかった……) そして、次回ですが…… GOSUB はやめて、DEF を使ってみようと思っています。 (最初にDEF は使わないって言った記憶があるんですが、やっぱり使います。 GOSUB の代わりに使うだけなら、そんなに覚える内容変わらないですし…… GOSUB 使って、変数が他の部分と重複しちゃわないかを常に考える方がむしろ大変なんじゃないかな、と思い直したので)
0そうだね
プレイ済み