|
|
2020/1/18(Sat) 15:48:53|NO.89275
某テ〇リスを一から製作しようとしたところです。
inst_mino,7,4,4<br>
inst_mino(4,0,0)=0,0,0,0
でエラー7(配列の要素が〜)が発生しました。
inst_minoは7,4,4の三次元配列で宣言したので、
inst_mino(4,0,0)=0,0,0,0
はinst_mino(4,0,0〜3)それぞれに0を代入するため
要素数のオーバーは起こさないと思うのですが…
また、この状態でもひとつひとつ崩して書くと、なぜかエラーは発生しません。
inst_mino (0〜3,0〜3,0)=0,0,0,0 は成功しています。代入する数値が0でなくても成功します。
誤字があるわけでもないのに、 inst_mino(4〜6,0〜3,0)=0,0,0,0 が成功しません。
なぜでしょうか…?
|
|
2020/1/18(Sat) 15:51:39|NO.89276
注釈
inst_mino(4〜6,0〜3,0)=0,0,0,0
というのは決して要素数にそのまま4〜6などと記入しているわけではなく、
単純に「4,5,6のどれでも」という意味です。わかりにくい表記で申し訳ありません…
|
|
2020/1/18(Sat) 16:52:38|NO.89279
inst_mino(4,0,0)=0,0,0,0
これだと代入対象は、(4,0,0)と(5,0,0)と(6,0,0)と(7,0,0)になってしまいます。
配列の範囲をオーバーするのはこれが原因です。
|
|
2020/1/18(Sat) 19:45:47|NO.89281
なるほど…崩して書くかループ処理でどこかから読み出すしかない感じなんですね…
ありがとうございました。
|
|
2020/1/18(Sat) 22:30:36|NO.89282
HSPの多次元配列の指定はCなどと逆になります
dimの要素数の指定をひっくりかえせば一気に代入できますよ
screen 0
font msgothic, 10
dim inst_mino, 4, 4, 7 //7,4,4から逆にする
inst_mino(0, 0, 0) = 1, 2, 3, 4
inst_mino(0, 0, 1) = 11, 22, 33, 44
inst_mino(0, 0, 6) = 66, 77, 88, 99
repeat length3(inst_mino)
cnt3 = cnt
repeat length(inst_mino)
cnt1 = cnt
mes strf("inst_mino(%d, %d, %d) = %d", cnt1, 0, cnt3, inst_mino(cnt1, 0, cnt3))
loop
loop
次のように確保した要素数を超えてもちゃんと自動拡張されます
inst_mino(0, 0, 8) = 80, 81, 82, 83
1次元目の自動拡張はNGです
inst_mino(0, 0, 6) = 60, 61, 62, 63, 64 //4要素しか無いのに5つは入らない
|
|