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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0902
火狐シューティング作ったんだがエラーがでる10解決


火狐

リンク

2013/9/2(Mon) 18:34:20|NO.56827

ちょっと前に質問したものです
横スクルールシューティング作ったんですが
スタート画面からスペースキーをおすと始まるはずなのに
149行目のパラメータが異常です
みたいなメッセージが出て終了してしまいます
repatをやりすごたのでしょうか?
わかるひとはおしえてください

;///画像読み込み/// buffer 1 :picload "mon_100.bmp" ;自キャラ画像読み込み buffer 2 :picload "tama.gif" ;弾画像読み込み buffer 5 :picload "haikei.jpg" ;背景画像読み込み mmload "music1.mid",1 screen 0,1350,800 ;画面サイズを1350× 800に変更 MX=240:MY=160 ;自キャラの初期位置 randomize ;使うかどうかわからないけど乱数初期化 cls 4 ;画面の色を黒に設定 TAMA=0 KY=0 tekikazu=0 maps=0 mapleng=0 sc=0 gosub *SETMAP mmplay 1 MX=80 :MY=160 :MYLIVE=1 dim SX,3 :dim SY,3 :dim TAMA,3 dim EX,TEKIKAZU :dim EY,TEKIKAZU :dim ELIVE,TEKIKAZU dim EDX,TEKIKAZU :dim EDY,TEKIKAZU dim POINTER,TEKIKAZU :dim ELOOP,TEKIKAZU dim ESYURUI,TEKIKAZU ;敵の種類 BAKULIVE=0: BAKUX=0: BAKUY=0 WORLDX=50 ;スクロール座標 ;///メインループ/// *hazimenomae mmplay 1 color 255,255,255 pos 255,255 mes "スタート" repeat stick KY,31 if (KY&16)=16 :gosub *hazime await 10 loop *hazime redraw 0 pos 271,0 :gcopy 5,10,10,1350,800 ;背景表示 pos 0,0 :gcopy 5,10,10,350,800 ;余白を背景の左端の部分で埋める stick KY,31 redraw 0 MPSHIFT=WORLDX\16 MPSTART=WORLDX/16 gosub *DRAWMAP ;地形描画呼びだし if MPSHIFT=0 :gosub *SETRETU ;敵配置呼びだし repeat 3 gosub *SHOT ;弾処理 loop repeat TEKIKAZU ;敵キャラ処理 if ELIVE(cnt)!0 :gosub *GOENEMY loop repeat TEKIKAZU ;当たり判定 if ELIVE(cnt)!0 :gosub *ATARI loop ;//自キャラの移動// stick KY,31 if (KY&1)=1 :MX=MX-12 :if MX<0 :MX=0 ;自キャラの左移動判定 if (KY&4)=4 :MX=MX+12 :if MX>1280 :MX=1280 ;自キャラの右移動判定 if (KY&2)=2 :MY=MY-12 :if MY<0 :MY=0 ;自キャラの上移動判定 if (KY&8)=8 :MY=MY+12 :if MY>799 :MY=799 ;自キャラの下移動判定 pos MX,MY ;自キャラ表示 gmode 2 gcopy 1,0,0,88,80 repeat TEKIKAZU ;敵キャラ処理 if ELIVE(cnt)!0 :gosub *GOENEMY loop repeat TEKIKAZU ;当たり判定 if ELIVE(cnt)!0 :gosub *ATARI loop MPX0=(MPSHIFT+MX+12)/16 :MPY0=(MY+12)/16 ;地形との当たり判定 MPX1=(MPSHIFT+MX+20)/16 :MPY1=(MY+20)/16 C=peek(MAPS,MPY0*MAPLENG+MPSTART-30+MPX0) if (C>'0')and(C<'A') :MYLIVE=0 C=peek(MAPS,MPY1*MAPLENG+MPSTART-30+MPX1) if (C>'0')and(C<'A') :MYLIVE=0 if BAKULIVE>0{ ;爆発表示 BAKULIVE=BAKULIVE-1 pos BAKUX,BAKUY gcopy 1,96,0,32,32 } font "MS ゴシック",18,1 ;スコア表示 pos 0,0 :color 255,255,255 :mes "SCORE:"+sc redraw 1 await 1 ;ステージクリアー、ゲームオーバー条件 if MYLIVE=0 :goto *GAMEOVER if MAPLENG-2=MPSTART :goto *CLEARSTAGE ;スクロール WORLDX=WORLDX+4 redraw 1 goto *hazime ;//弾発射// *SHOT if (KY&16)!=0 & TAMA(cnt)=0 { ;スペースキー判定 TAMA(cnt)=1 TX(cnt)=MX+24 TY(cnt)=MY+12 RENSYA=20 } if TAMA(cnt)=1 { TX(cnt)=TX(cnt)+30 color 0,255,255 :boxf TX(cnt),TY(cnt),TX(cnt)+18,TY(cnt)+4 if TX(cnt)>1349 :TAMA(cnt)=0 } if RENSYA>0 :RENSYA=RENSYA-1 return ;//マップ// *SETMAP MAPLENG=512 sdim MAPS,MAPLENG*20 bload "yokomap.txt",MAPS,MAPLENG*20 return *DRAWMAP repeat 80 RCNT=cnt repeat 100 if MPSTART-30+cnt<0 :continue C=peek(MAPS,RCNT*MAPLENG+MPSTART-30+cnt) if (C>'0') and (C<'A'){ pos cnt*16-MPSHIFT,RCNT*16 gcopy 2,(C-'1')*16,0,16,16 } loop loop return *atari return *setretu return *goenemy return *gameover return *clearstage return



この記事に返信する


かずまっくす

リンク

2013/9/2(Mon) 19:16:57|NO.56828

YO!
おめぇさんYO!
画像がないから実行できねぇYO!
まずはそこをなんとかしようぜEXE!



火狐

リンク

2013/9/2(Mon) 19:19:15|NO.56829

すいません
ちょっとまってくださいYO



火狐

リンク

2013/9/2(Mon) 19:32:15|NO.56830


screen 0,1350,800 ;画面サイズを1350× 800に変更 MX=240:MY=160 ;自キャラの初期位置 randomize ;使うかどうかわからないけど乱数初期化 cls 4 ;画面の色を黒に設定 TAMA=0 KY=0 tekikazu=0 maps=0 mapleng=0 sc=0 gosub *SETMAP mmplay 1 MX=80 :MY=160 :MYLIVE=1 dim SX,3 :dim SY,3 :dim TAMA,3 dim EX,TEKIKAZU :dim EY,TEKIKAZU :dim ELIVE,TEKIKAZU dim EDX,TEKIKAZU :dim EDY,TEKIKAZU dim POINTER,TEKIKAZU :dim ELOOP,TEKIKAZU dim ESYURUI,TEKIKAZU ;敵の種類 BAKULIVE=0: BAKUX=0: BAKUY=0 WORLDX=50 ;スクロール座標 ;///メインループ/// *hazimenomae mmplay 1 color 255,255,255 pos 255,255 mes "スタート" repeat stick KY,31 if (KY&16)=16 :gosub *hazime await 10 loop *hazime redraw 0 stick KY,31 redraw 0 MPSHIFT=WORLDX\16 MPSTART=WORLDX/16 gosub *DRAWMAP ;地形描画呼びだし if MPSHIFT=0 :gosub *SETRETU ;敵配置呼びだし repeat 3 gosub *SHOT ;弾処理 loop repeat TEKIKAZU ;敵キャラ処理 if ELIVE(cnt)!0 :gosub *GOENEMY loop repeat TEKIKAZU ;当たり判定 if ELIVE(cnt)!0 :gosub *ATARI loop ;//自キャラの移動// stick KY,31 if (KY&1)=1 :MX=MX-12 :if MX<0 :MX=0 ;自キャラの左移動判定 if (KY&4)=4 :MX=MX+12 :if MX>1280 :MX=1280 ;自キャラの右移動判定 if (KY&2)=2 :MY=MY-12 :if MY<0 :MY=0 ;自キャラの上移動判定 if (KY&8)=8 :MY=MY+12 :if MY>799 :MY=799 ;自キャラの下移動判定 pos MX,MY ;自キャラ表示 gmode 2 mes "自キャラ" repeat TEKIKAZU ;敵キャラ処理 if ELIVE(cnt)!0 :gosub *GOENEMY loop repeat TEKIKAZU ;当たり判定 if ELIVE(cnt)!0 :gosub *ATARI loop MPX0=(MPSHIFT+MX+12)/16 :MPY0=(MY+12)/16 ;地形との当たり判定 MPX1=(MPSHIFT+MX+20)/16 :MPY1=(MY+20)/16 C=peek(MAPS,MPY0*MAPLENG+MPSTART-30+MPX0) if (C>'0')and(C<'A') :MYLIVE=0 C=peek(MAPS,MPY1*MAPLENG+MPSTART-30+MPX1) if (C>'0')and(C<'A') :MYLIVE=0 font "MS ゴシック",18,1 ;スコア表示 pos 0,0 :color 255,255,255 :mes "SCORE:"+sc redraw 1 await 1 ;ステージクリアー、ゲームオーバー条件 if MYLIVE=0 :goto *GAMEOVER if MAPLENG-2=MPSTART :goto *CLEARSTAGE ;スクロール WORLDX=WORLDX+4 redraw 1 goto *hazime ;//弾発射// *SHOT if (KY&16)!=0 & TAMA(cnt)=0 { ;スペースキー判定 TAMA(cnt)=1 TX(cnt)=MX+24 TY(cnt)=MY+12 RENSYA=20 } if TAMA(cnt)=1 { TX(cnt)=TX(cnt)+30 color 0,255,255 :boxf TX(cnt),TY(cnt),TX(cnt)+18,TY(cnt)+4 if TX(cnt)>1349 :TAMA(cnt)=0 } if RENSYA>0 :RENSYA=RENSYA-1 return ;//マップ// *SETMAP MAPLENG=512 sdim MAPS,MAPLENG*20 bload "yokomap.txt",MAPS,MAPLENG*20 return *DRAWMAP repeat 80 RCNT=cnt repeat 100 if MPSTART-30+cnt<0 :continue C=peek(MAPS,RCNT*MAPLENG+MPSTART-30+cnt) if (C>'0') and (C<'A'){ pos cnt*16-MPSHIFT,RCNT*16 } loop loop return *atari return *setretu return *goenemy return *gameover return *clearstage return



かずまっくす

リンク

2013/9/2(Mon) 19:38:09|NO.56831

おいおいOIOIオイスター
マップのtextがないぜジェントルメン
こいつはthat was textbooksなミスだぜぃ?



火狐

リンク

2013/9/2(Mon) 19:40:20|NO.56832

大変申し訳ないのですがテキストはyokomap.txt
という名前で作っていただけないでしょうか?
中身は空でいいので



かずまっくす

リンク

2013/9/2(Mon) 19:59:41|NO.56833

これはpeekの2ばんめの引数がバッファのサイズをオーバーしてるんだな
具体的には10240以上になっとる
その性でエラー出るからたぶん計算式が間違えてる



火狐

リンク

2013/9/2(Mon) 20:02:43|NO.56834

といいますと
具体的にどのようにすればよろしいでしょうか?



かずまっくす

リンク

2013/9/2(Mon) 20:33:10|NO.56835

いや、変数の意味とかは作った人にしかわからないから、どうしようもない



暇人

リンク

2013/9/2(Mon) 20:37:41|NO.56836

まずエラーメッセージは正確に書く必要がある
Ctrl+C でエラーダイアログの文章を、コピーできるので、それを使うとか

-->パラメータの値が異常です

>C=peek(MAPS,RCNT*MAPLENG+MPSTART-30+cnt)
値が異常なんだから
右側のパラメータが左の変数のメモリサイズ以上(あるいはマイナス)を示してる可能性が高い

ループを見ると
> repeat 80
> RCNT=cnt
> repeat 100
で512が入ってるMAPLENGとRCNTが掛けられてるので
40960バイトは必要になるが実際には
> sdim MAPS,MAPLENG*20
で20回分の10240バイトしか確保してない

エラーが出たときはデバックウィンドウも出るので
停止時の変数の中身を見る事が出来る

後、秒間30フレームとかじゃない限り
毎フレーム8000回ループしてマップ作るのは処理量的に無理がある・・・



火狐

リンク

2013/9/2(Mon) 20:45:03|NO.56837

なるほど!
ありがとうございます


それでカクカクしてたのか



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