トピック
oo meidoin21

BGMPLAY A$+B$=ERROR?

まずは画像を見てください。 最初のBGMPLAYの文字列をA$、次のBGMPLAYの文字列をB$、そして文字列がA$とB$をそのままの形でくっつけたものが最後のBGMPLAYとなります。 一番最初とその次のBGMPLAY、つまりBGMPLAY A$とBGMPLAY B$はちゃんと動作するんです。でも、最後のBGMPLAY、つまりBGMPLAY A$+B$になるとエラーが出てしまいます…。 何か見落としがあるのは間違いないでしょうけど…私にはわかりませんでした。どこに問題があるか指摘して頂けないでしょうか?
3そうだね
プレイ済み
返信[1]
親投稿
イスターリャ arduinotexter
トラック0と1を、A$とB$合わせて2回指定しているからでは?
0そうだね
プレイ済み
返信[2]
親投稿
oo meidoin21
※A$+B$ と書きましたが、A$とB$をそのままくっつけた訳ではありませんので、画像をよく見てください。
1そうだね
プレイ済み
返信[3]
親投稿
イスターリャ arduinotexter
再現できました。 MML変数を使用した直後にMML変数への代入を行うと「内部エラー」になるようです。 添付画像のカーソル辺りに再現箇所があります。
1そうだね
プレイ済み
返信[4]
親投稿
oo meidoin21
BIG_TEXTERさん» 「内部変数を使用した直後に内部変数への代入を行うとエラーになる」ということで、該当しそうな部分を書き直してみましたが、同じエラーがでてしまいました…。内部変数の使用後に内部変数への代入を行なわないように書き換えたのですが…
1そうだね
プレイ済み
返信[5]
親投稿
oo meidoin21
後々調べてみると、画像のようなMML文字列でもエラーになるようです。
1そうだね
プレイ済み
返信[6]
親投稿
oo meidoin21
問題のA$+B$を内部変数使用後に内部変数に代入しないよう書き換えたMML文字列に"$0=0"と、内部変数0番への代入を最初に行ったところ正常な動作をしました。もしかしたら今回の問題と内部変数0番は何か関係があるのかもしれません。
2そうだね
プレイ済み
返信[7]
親投稿
oo meidoin21
と思ったら…(画像参照) MML内部変数の謎は深まるばかり…
2そうだね
プレイ済み
返信[8]
親投稿
☆Tatsukin★ tatu_kin1192
エラーになっているのは、$0の中に、$0があるからだと思います。 例えば、BGMPLAY "$0=16:0ABCDET120$0" はエラーになります。 変数の中に、同じ変数があると、無限ループになってしまいます。
0そうだね
プレイ済み
返信[9]
親投稿
☆Tatsukin★ tatu_kin1192
一番最初の画像も、$2の中に$2がありますね。 MMLの中では、「:を置いても、区切れない」と認識されるんだと思います。
0そうだね
プレイ済み
返信[10]
親投稿
oo meidoin21
☆Tatsukin★さん» $0の中に$0が入っているとエラーになるとのことですが、その考えでいくと画像の下2つようなプログラムは動かないハズなのですが…($0の中に$0があるの解釈が違っていたらすみません) あと、☆Tatsukin★さんが例えばでだしたMML文字列ですが、数字の直後に内部変数を使っている時点で$0に$0が入っているいないに関係無くエラーが起きると思うのですが…><
0そうだね
プレイ済み
返信[11]
親投稿
oo meidoin21
この問題を解決できないとMML検索機能でバグが発生しかねないんですよね…(MML検索機能では、内部変数をMML文字列内であればどこからでも定義または変更でき、使い方さえあっていれば何度でも使用できるようにしているので) こうなったらMML検索機能での内部変数が使用されたMMLを検索不可能とするべきか、変数使用部分の置き換え、変数代入部分の削除をするように処理を変更すべきなのか…
0そうだね
プレイ済み
返信[12]
親投稿
oo meidoin21
近いうちに新しいトピを建てたいと思うので閉じさせていただきます。 回答してくださった皆さん、ありがとうございました!
0そうだね
プレイ済み