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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0720
raganエラーの理由がわかりません。3解決


ragan

リンク

2012/7/20(Fri) 17:28:11|NO.47789

いま、STGを製作中で、下のようなスクリプトを作りました。


#define zako 50 //敵の数を50体に設定 dim zk,zako dimtype zax,vartype("double"),zako //雑魚敵のx座標、y座標の数を設定 dimtype zay,vartype("double"),zako dimtype zmx,vartype("double"),zako //雑魚敵の移動量設定 dimtype zmy,vartype("double"),zako dim ztype,zako //雑魚の種類 dim zb_attk,zako //雑魚敵の弾発射時間 #define zbullet_max,3000 //雑魚敵の弾の数 dim zbullet,zbullet_max dimtype zb_x,vartype("double"),zbullet_max //雑魚敵の弾の位置 dimtype zb_y,vartype("double"),zbullet_max dimtype zbspeed_x,vartype("double"),zbullet_max //雑魚敵の弾の弾の動くスピード dimtype zbspeed_y,vartype("double"),zbullet_max dim zb_type,zbullet_max //雑魚敵の弾の種類 gsel 0 *main redraw 0 color 0,0,0 : boxf : color 255,255,255 font "",16 repeat zbullet_max if zbullet(cnt)=1{ pos zb_x(cnt),zb_y(cnt) mes "●" } loop font "",24 repeat zako if zk(cnt)=1{ pos zax(cnt)-12.0,zay(cnt)-12.0 mes "●" //雑魚敵のいる位置に丸を表示 } loop color 255,255,255 : boxf 400,0,640,480 gosub *timetable if call=1 : gosub *ecall repeat zb_attk if zk(cnt)=1{ zin=cnt zb_attk(cnt)++ //一定の時間が経ったら弾を発射するようにする if zb_attk(cnt)=15 : gosub *ebullet } loop repeat bullet_max b_x(cnt) = b_x(cnt)+bspeed_x(cnt) //弾の移動 b_y(cnt) = b_y(cnt)+bspeed_y(cnt) if b_x(cnt)<-8 | b_y(cnt)<-8 |b_x(cnt)>648|b_y(cnt)>488 : bullet(cnt) = 0 loop gosub *emove frame++ redraw 1 await 16 goto *main *ecall//敵出現 repeat zk if zlife(cnt)<=0{;画面に敵がいなければrepeatに戻る zk(cnt)=1 ;敵の存在確認用 zlife(cnt)=2 ;敵の体力 zb_attk(cnt)=0 call=0 break ;repeat?loop間のループから、強制的に抜け出す } loop return *ebullet//敵弾発射 if zb_attkt(cnt)=1{ gosub *ebsearch if number != -1{ zbullet(number) = 1 zb_x(number) = zax(zin) //敵弾の開始位置 zb_y(number) = zax(zin) zbspeed_x(number) = 2.0 //弾の移動速度 zbspeed_y(number) = 3.0 } } return *ebsearch//敵弾捜索 repeat zbullet_max if zbullet(cnt)=0{ number = cnt zbullet(cnt)=1 break } loop return *emove//敵移動 repeat zako if zk=1{ if ztype(cnt)-3<=0 : zmx(cnt)=0.0 : zmy(cnt)=2.0//下移動 zax(cnt)=zax(cnt)+zmx(cnt) zay(cnt)=zay(cnt)+zmy(cnt) if zax(cnt)<-20|zax(cnt)>420|zay(cnt)<-20|zay(cnt)>500 : zx=0 } loop *timetable//敵出現テーブル if frame=10 : call=1 : zax(0)=200 : zay(0)=-20 : zk(0)=1 : zattkt(0)=1 return

なんら問題はないと思ったのですが、なぜかエラーが出てしまいます。
どうしても原因がわかりません。なぜでしょうか。



この記事に返信する


@key

リンク

2012/7/20(Fri) 18:18:51|NO.47790

エラーには行数が書かれてるからそこをチェックすればいい

#defineを使うと文字列として起き変わってしまうから
数値として置き換える#constを使えば解決



YSR

リンク

2012/7/20(Fri) 18:50:19|NO.47791

>@keyさん
>#defineを使うと文字列として起き変わってしまう
普通に数字として置き換わるんだが?

>raganさん
とりあえずエラーが出たらデバッガ見ようぜ?
zbulletっつー配列が(1,3000)の二次元配列になってるからエラー吐いたんだと思うぞ?

……あ、分かった。
>#define zbullet_max,3000
ここを
>#define zbullet_max 3000
にすれば解決じゃん!
(なんで一行目だとコンマ無しで書いてるのにコンマを付けちゃったのか……)



ragan

リンク

2012/7/21(Sat) 11:06:46|NO.47810

>>YSRさん
こんな初歩的なミスだったとはまったくお恥ずかしい限りです。
dimと間違えてたようです。
今後気を付けます(^^;)



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