HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0719
ひつじ−まんMAP2未解決


ひつじ−まん

リンク

2010/7/19(Mon) 17:02:12|NO.33794

;/■/■/■メインループ/■/■/■
*DRAWLOOP1 redraw 0 color 0,0,0 :boxf 0,0,479,335 MDX=0 :MDY=0 ;カーソルキーに応じて移動量MDX,MDYを取得 stick KY,15,1 if KY=1 :MDX=-1 if KY=4 :MDX=1 if KY=2 :MDY=-1 if KY=8 :MDY=1 MMX=MX+MDX :MMY=MY+MDY ;移動量を足して、移動先の座標を求める L=MAP(MMX,MMY) ;移動先のマップデータを変数Lに代入 if L<2 {MX=MMX:MY=MMY} ;移動先が2未満ならそこに移動 if MX<0 :MX=0 ;マップからはみ出さないよう制限 if MX>44 :MX=44 if MY<0 :MY=0 if MY>44 :MY=44 ;画面表示 gosub *DRAWMAP color 255,255,255 :pos 0,288 :mes MESSAGE redraw 1 await 80 goto *DRAWLOOP1

L=MAP(MMX,MMY) ;移動先のマップデータを変数Lに代入


この部分が「配列の要素が無効です」となります
どうすればいいですか?



この記事に返信する


GENKI

リンク

2010/7/19(Mon) 19:00:33|NO.33798

十分なサイズの配列が確保されていないのではないでしょうか。
dim命令で十分なサイズを確保してください。

すでにやっているという場合は、デバッグウィンドウで、エラーが出たときのMMXとMMYの値を確認してみてください。



木村

リンク

2010/7/19(Mon) 19:15:24|NO.33799

 『 L=MAP(MMX,MMY) ;移動先のマップデータを変数Lに代入』を

title "MMX=" + MMX + " : MMY=" + MMY : L=MAP(MMX,MMY)
 と、書き換えるとタイトル部分にMMXとMMYの値が表示されます。
 多分、この値がエラー時にはマイナス値を叩き出しているか、dimで定義した配列の範囲を
越えてしまっていると思われます。早い話、次の段落で行っている制限処理を件の行の前に
置けば済む話です。

 が、実はこの制限処理の部分はlimit関数を使うともっと軽やかに始末できます。2段落目を
以下のように書き換えます。

MMX=limit(MX+MDX,0,44) ;移動量を足して、移動先のX座標を求める MMY=limit(MY+MDY,0,44) ;移動量を足して、移動先のY座標を求める L=MAP(MMX,MMY) ;移動先のマップデータを変数Lに代入 if L<2 {MX=MMX:MY=MMY} ;移動先のマップ情報が2未満ならそこに移動
 移動先の範囲を予め(0〜44,0〜44)の空間内に収めておく事で、件の行のエラーも防げる上、
実位置の範囲を制限する第3段落を省略する事ができます。



ONION software Copyright 1997-2023(c) All rights reserved.