プレイ日記
「スクリーンデータってなんじゃい 多分これがOut of range」の投稿が100コメ行っちゃったのでこれからはここでやっていきます。 画面写真参照が最新のキーです。 最初から始めるとライバルの名前を名無しにしかできない&それが主人公の名前になる さらに主人公の座標の読み込みもできてない。 BGHANTEIによる当たり判定は復活した様子
8そうだね
プレイ済み
返信[1]
親投稿
otta777 otta777a
変数X、Yが何に使われているかは調べられましたか?
0そうだね
プレイ済み
返信[2]
親投稿
SHUHEI Syuhei36
八        最近忙しくて本当にできない。 十  残し    プチコンできるの休日位だな・・・ 八        でも可能な限り協力しまっせ!
0そうだね
プレイ済み
返信[3]
親投稿
SHUHEI Syuhei36
↑ミスった恥ずかしいw
0そうだね
プレイ済み
返信[4]
親投稿
»otta777さん 画面写真にまとめました。 なんかめっちゃ使われてます。 »SHUHEIさん 何が言いたかったのか気になる…((
1そうだね
プレイ済み
返信[5]
親投稿
SHUHEI Syuhei36
八     最近忙しくて本当にできない。 十  残し プチコンできるの休日位だな・・・ 八     でもできる限り協力しまっせ! 修正版。
1そうだね
プレイ済み
返信[6]
親投稿
MSG_CLRのYはローカル変数Yだね
0そうだね
プレイ済み
返信[7]
親投稿
otta777 otta777a
主人公の座標X,Yを設定した後に@BGPUTを呼び出すと@BGPUTの サブルーチンの中でBGを描画する為に変数X,Yを使ってる為 BGPUT命令でOut of rangeが発生するということですよ。 Y=0を追加したらエラーは出なくなったと報告されていましたが プレイヤーの座標が指定した位置にならなかったと思います。 結論から言うと用途の違う変数に同じ名前を使うと思わぬ バグの原因になるということです。 @BGPUTの中で使っている変数X,Yは_X,_Yに書き換えて変数名が 被らない様にして下さい。
1そうだね
プレイ済み
返信[8]
親投稿
よく使う変数は短くする慣習があるが、システム系の変数はしっかりした変数名のほうがいいかもね MY_X,MY_Yみたいな? 逆に一時的な使い回し変数に特定の記号も付けるもよし。 TMPX,TMPYとか
0そうだね
プレイ済み
返信[9]
親投稿
「Bはボタン値とし、それ以外の英字1字の変数名は一時変数とする」みたいな取り決めを決めるって重要
0そうだね
プレイ済み
返信[10]
親投稿
すいません。2つやりそこねていました。 なのでやってみたところ、マップを切り替えない限りは問題なかったです。 マップを切り替えるとエラーとなります。
1そうだね
プレイ済み
返信[11]
親投稿
ちなみにOut of rangeです
2そうだね
プレイ済み
返信[12]
親投稿
otta777 otta777a
LIST ERRで編集モードになりエラーの出た行にカーソルが移動します。 そこで使っている変数の値をチェックしてみて下さい。 Out of rangeの原因になってる部分はそれで調べが付くと思われます。
1そうだね
プレイ済み
返信[13]
親投稿
ここが原因でした またここか…
1そうだね
プレイ済み
返信[14]
親投稿
全変数の数値を確認
1そうだね
プレイ済み
返信[15]
親投稿
otta777 otta777a
BGPUT命令の_YがBG画面の高さより大きい16になっているのが原因です。 BGSCREEN命令でサイズを変更していない場合は幅、高さは画面の 大きさに合わせられるため上画面では幅25、高さ15になります。 @BGPUTを呼び出したときに_Yの値を0にしないと2回目に@BGPUTを 呼び出したときにこのような状態になります。
1そうだね
プレイ済み
返信[16]
親投稿
otta777 otta777a
ライバルの名前に関する不具合も変数が重複しているのが原因です。 主人公の名前を入力した後にライバルの名前を入力するために @NAMEにGOTOしたら主人公の名前を書き換えてしまうことになりませんか?
0そうだね
プレイ済み
返信[17]
親投稿
_Y=0を追加したところBGPUT"だけは"されたが まだエラーが… NAMEキーボードの「X」「Y」を「XN」「YN」に変えたところ、カーソルが動かなくなり「わ」しか打てず、でも適当に十字押したら「わよよよよよ」みたいになり、 ライバルの名前からは何も変えてません(まだ空&主人公名)
1そうだね
プレイ済み
返信[18]
親投稿
変数名変更って割と管理に失敗することがあるので 1.名前を変えたい範囲のプログラムを別のスロットにコピー 2.置き換えで一気にどっか~ん 3.それをもとの場所に貼りつける こうすれば安全性は上がる
0そうだね
プレイ済み
返信[19]
親投稿
そういえばSTRICT改造おススメ
1そうだね
プレイ済み
返信[20]
親投稿
otta777 otta777a
エラーが出るマップのマップデータをよく見直しましょう。エラーが出ないマップと違いはありませんか?
1そうだね
プレイ済み
返信[21]
親投稿
よく見たら最後に「DATA ""」を忘れていました。 追加したところ、全てが問題なく作動しました。 これで長きにわたったマップのBGPUT問題は解決しました! 本当にありがとうございました! さて、次は名前を決める場所の修正。 STRICTにしてみますか…
2そうだね
プレイ済み
返信[22]
親投稿
SHUHEI Syuhei36
おめでとうございます!! これからも頑張って下さい!!!
2そうだね
プレイ済み
返信[23]
親投稿
OPTION STRICTにして、全変数を宣言しました。 画面写真一番上がゲーム単体 上から2番目がGRPもセットになったものです。
2そうだね
プレイ済み
返信[24]
親投稿
otta777 otta777a
NAME入力の部分でX→XN、Y→YNに変えたとありますが…不十分です。 もう一度見直して変え忘れているところが無いか確認して下さい。
2そうだね
プレイ済み
返信[25]
親投稿
微妙にあった。修正。 そして「NAME$」を「NAMAE$」に変えてみた。 理由 主人公の名前がNAME$に格納され、ライバルの名前はRAIBARU$に格納される。 ライバルの名前を決める時にNAME$を使うのが不具合の原因の一部かな、と考えたから。 BLX,BYなど、X,Y以外の変数はそのままでいいと思うのでこれで…と思ったら (キーボードのカーソルが全然動かない)
1そうだね
プレイ済み
返信[26]
親投稿
otta777 otta777a
ボタン入力でカーソルの位置の変数XN,YNを変更してますよね? カーソルを表示するときにその変数の値を利用してますか?
0そうだね
プレイ済み
返信[27]
親投稿
カーソルの位置はLX,LYを使用しているようですね XN,YNは「カーソルの位置がどこだったらどうするのかを決める時に使う変数」のようです
0そうだね
プレイ済み
返信[28]
親投稿
otta777 otta777a
@Lの後にもLX,LYをXN,YNをもとに計算してる部分があるはずですが そこも@KLの後と同様にしていますか? カーソルが動かないのはひらがなの入力部分なのでここがX,Yを参照してたら カーソルの位置は変化しないかと思います。
0そうだね
プレイ済み
返信[29]
親投稿
さっき見てみたところ、動かない、というよりは「ろ」「も」「ほ」「の」「と」「そ」「こ」「お」、一番下の文字しか打てない、という感じです。 下から2番目や1文字消すなどの1行上、下のところはカーソルを動かせますが一瞬だけしかとどまらないです。 尚、今の状態では主人公の名前もライバルの名前も「」になっちゃいます。
1そうだね
プレイ済み
返信[30]
親投稿
otta777 otta777a
変数LYが強制的に書き換えされてるようですね。LY=としている部分を検索してみて変数が重複したり書き換えされているところが無いか確認してみてください。
1そうだね
プレイ済み
返信[31]
親投稿
otta777 otta777a
@ENDで主人公の名前の変数NAME$、ライバルの名前の変数 RAIBARU$に入力した名前を代入する処理が必要なはずですが その処理に問題はないですか?
1そうだね
プレイ済み
返信[32]
親投稿
変数RAIBARUが0の時はNAMAE$を主人公の名前(NAME$)に、1の時はNAMAE$をライバルの名前(RAIBARU$)に入れます。
1そうだね
プレイ済み
返信[33]
親投稿
LY=で検索したところ2件ヒットしました
1そうだね
プレイ済み
返信[34]
親投稿
otta777 otta777a
・名前について A$=B$とするとB$の内容がA$に代入されるのは分かりますか? IF命令のスクリーンショットのプログラムの動作説明とプログラムの内容が 合ってないですよ。代入命令の部分をよく確認してみて下さい。 ・カーソル位置について 変数LYを計算するのに変数YNを使ってますよね。変数YNにも変数が 重複したり書き換えされているところが無いか確認してみてください。
1そうだね
プレイ済み
返信[35]
親投稿
・名前について NAME$=NAMAE$ RAIBARU$=NAMAE$ に直したところ上手くいきました。 ・カーソルについて DEF命令MSG_DKTNのYをYNにしていたためにこのような事になっていました。 MSG_DKTN内のYNだけをYにした所正しく動きました。 これで全て上手くいったかと思われます。
1そうだね
プレイ済み
返信[36]
親投稿
DEF内はローカル宣言したほうがいいよ(同じ名前でもDEFの外と別の変数にできる) DEF MSG_DKTN T$の次にVAR Y
1そうだね
プレイ済み
返信[37]
親投稿
あれ、というよりメッセージシステムは私が設計したけど変数宣言無かったっけ?
0そうだね
プレイ済み
返信[38]
親投稿
改造する際に消してしまったのだろうか 宣言するのは VAR C,F,I,Y
1そうだね
プレイ済み