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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0730
mmゲーム内で画像を表示するとおかしくなるんですが...3解決


mm

リンク

2016/7/30(Sat) 15:16:34|NO.76436


// メイン部 *Init ;スコアの管理 dim HiScore ;最高スコア ;自機の管理 dim x ;自機の横軸 dim y ;自機の縦軸 dim fight ;自機の残機数 dim blast ;自機の爆発カウンタ ;弾丸の管理 dim tamaF,10 ;有無フラグ dim tamaX,10 ;弾丸の横軸 dim tamaY,10 ;弾丸の縦軸 ;敵機の管理 dim enemyF,20 ;有無フラグ dim enemyX,20 ;敵機の横軸 dim enemyY,20 ;敵機の縦軸 dim enemyZ,20 ;敵機の爆発カウンタ dim enemyShotTime, 20 ;流星の管理 dim starF,50 ;有無フラグ dim starX,50 ;流星の横軸 dim starY,50 ;流星の縦軸 ;敵の弾の情報を保持する配列 dim tama,20 ddim tx,10,20 ddim ty,10,20 ddim tvx,10,20 ddim tvy,10,20 ;スコアの初期化 Score=0 HiScore=9900 ;自機の初期化 x=(600-50)/2 y=(400-50)-16 fight=3 blast=0 *Start screen 0,600,400,SCREEN_FIXEDSIZE title "シューティング・ゲーム" redraw 0 color:boxf color $00,$FF,$FF:font "HG明朝E",50:pos (600-50*11)/2,100:mes "シューティング・ゲーム" color $FF,$FF,$00:font "HG明朝E",30:pos (600-30* 6)/2,180:mes "〜未完〜" color $FF,$FF,$FF:font "HG明朝E",16:pos (600- 8*15)/2,250:mes "[SPC]キーで開始" color $FF,$FF,$FF:font "HG明朝E",16:pos (600- 8*15)/2,282:mes "[ESC]キーで終了" redraw 1 repeat stick key if(key & $10):break if(key & $80):end await 20 loop *Main font MSGOTHIC,50 randomize repeat redraw 0 stick key,%11111 gosub *EnemyBirth gosub *enemyTamaUtu gosub *StarBirth gosub *StarDraw gosub *FightDraw gosub *EnemyDraw gosub *TamaDraw gosub *TelopDraw gosub *enemyTamaDraw redraw 1 await (1000/60) loop stop // 自機の描画 *FightDraw if(blast==0){ if(key&1):x-=5:if(x<0):x=0 if(key&2):y-=5:if(y<0):y=0 if(key&4):x+=5:if(x>550):x=550 if(key&8):y+=5:if(y>350):y=350 if(key&16):gosub *TamaBirth color $00,$FF,$00:pos x,y:mes"I" } else:if(blast>1){ blast-- color $FF,$00,$00:pos x,y if(blast\10<5):mes "※":else:mes "*" } else:if(fight){ fight-- blast=0 x=(600-50)/2 y=(400-50)-16 } else{ dialog "ざんねーんwもう一回やる?",3,"ゲームオーバー" if(stat==7):end ;スコアの初期化 Score=0 ;自機の初期化 x=(600-50)/2 y=(400-50)-16 fight=3 blast=0 ;配列の初期化 dim starF,50 dim tamaF,10 dim enemyF,20 } return // 流星の発生 *StarBirth if(starCycle):starCycle--:return foreach starF if(starF(cnt)==0){ starF(cnt)=1 starX(cnt)=rnd(600) starY(cnt)=0 break } loop starCycle=3 return // 流星の描画 *StarDraw color $00,$00,$225:boxf foreach starF if starF(cnt){ starY(cnt)+=2:if(starY(cnt)>=400):starF(cnt)=0:continue color $FF,$FF,$00 pset starX(cnt),starY(cnt) } loop return // 弾丸の発生 *TamaBirth if(tamaTrigg):tamaTrigg--:return foreach tamaF if(tamaF(cnt)==0){ tamaF(cnt)=1 tamaX(cnt)=x tamaY(cnt)=y break } loop tamaTrigg=8 return // 弾丸の描画 *TamaDraw foreach tamaF if tamaF(cnt){ tamaY(cnt)-=8:if(tamaY(cnt)<-50):tamaF(cnt)=0:continue pos tamaX(cnt),tamaY(cnt) color $FF,$FF,$00:picload "k.jpg" } loop return // 敵機の発生 *EnemyBirth if(enemyCycle):enemyCycle--:return foreach enemyF if(enemyF(cnt)==0){ enemyF(cnt)=1 enemyX(cnt)=rnd(600/50)*50 enemyY(cnt)=-50 enemyZ(cnt)=0 break } loop enemyCycle=30 return // 敵機の描画 *EnemyDraw foreach enemyF if enemyF(cnt){ if(enemyZ(cnt)==0){ enemyY(cnt)+=3:if(enemyY(cnt)>400) :enemyF(cnt)=0:continue if FightCrash(enemyX(cnt),enemyY(cnt)) :enemyZ(cnt)=60:ScoreCalc 100:continue if TamaCrash(enemyX(cnt),enemyY(cnt)) :enemyZ(cnt)=60:ScoreCalc 100:continue pos enemyX(cnt),enemyY(cnt) color $00,$FF,$FF:mes "T" } else:if(enemyZ(cnt)>1){ enemyZ(cnt)-- color $FF,$00,$00:pos enemyX(cnt),enemyY(cnt) if(enemyZ(cnt)\10<5):mes "※":else:mes "*" } else{ enemyF(cnt)=0 } } loop return // テロップの描画 *TelopDraw msg="残機:" repeat fight msg+="I" loop y(1)=0:x(1)=(20) y(2)=0:x(2)=(600-20)-(16*11) x(3)=0:y(3)=(400-20) font MSGOTHIC,20,1 color $FF,$FF,$00:pos x(1),y(1):mes strf("Score:%08d",Score) color $FF,$FF,$00:pos x(2),y(2):mes strf("HiScore:%08d",HiScore) color $00,$FF,$00:pos x(3),y(3):mes msg font MSGOTHIC,50 return // スコアの加算 #deffunc ScoreCalc int _score_ Score+=_score_ if(Score>HiScore):HiScore=Score return // 自機の衝突判定 #defcfunc FightCrash int _x_,int _y_ if(blast==0)and(abs(x-_x_)<5)and(abs(y-_y_)<3){//当たり判定 blast=60 return 1 } return 0 // 自機弾の衝突判定 #defcfunc TamaCrash int _x_,int _y_ n=0 foreach tamaF if tamaF(cnt){ if(abs(tamaX(cnt)-_x_)<50)and(abs(tamaY(cnt)-_y_)<50){ tamaF(cnt)=0 n=1 break } } loop return n //弾の処理 *enemyTamaDraw for j,0,9,1 if tama(j) > 0 { tama(j)++ if tama(j) > 120 :tama(j) = 0 //画面から消えて時間が経った弾を消去 repeat 20 tx(j,cnt) += tvx(j,cnt) ty(j,cnt) += tvy(j,cnt) + 2 color 100,255,255 pset tx(j,cnt),ty(j,cnt) if (FightCrash(tx(j,cnt),ty(j,cnt))) :continue //敵弾衝突判定 loop } next return *enemyTamaUtu for k,0,length(enemyF),1 if enemyF(k) { if (enemyShotTime(k)){ enemyShotTime(k)-- _continue } ex = enemyX(k) ey = enemyY(k) gosub *create_circle_bullet enemyShotTime(k) = 150 } next return //弾の生成 *create_circle_bullet v = 4.0 //弾の速度 a = 0.0 gosub *bullet_check if i >= 10 : return repeat 20 tx(i,cnt) = double(ex) ty(i,cnt) = double(ey) tvx(i,cnt) = v * cos(a) tvy(i,cnt) = v * sin(a) a += 0.162 loop return //空いている弾の配列を探す *bullet_check i = 10 repeat 20 if tama(cnt) = 0 : i = cnt : break loop if tama(i) = 1 :return tama(i) = 1 return
これのどこがいけないのでしょう?



この記事に返信する


暇人

リンク

2016/7/30(Sat) 16:47:34|NO.76437

画像ファイルも無いなので
具体的に何がどうおかしいのか書いた方が良い

> color $FF,$FF,$00:picload "k.jpg"


color $FF,$FF,$00:picload "k.jpg",1
に変えれば、とりあえず直るだろう
ただ、毎回jpgをpicloadするのは無駄な処理になるので
befferに読み込んでgcopyかcelputを使った方が良い



bellyoshi

リンク

2016/7/30(Sat) 19:26:56|NO.76438

どうやら
http://blog.goo.ne.jp/masaki_goo_2006/e/380943b8a9f0ecaea0f7f4fb034e6e75
のページを参考にしておられるようですが、

以下のページが役に立つのでは?

http://mclass13.web.fc2.com/hspstudy/shooter1.htm

http://masudahp.web.fc2.com/hsp3/game/hspg210.html

文字ではなく、画像でシューティングゲームを作る講座です。



mm

リンク

2016/8/1(Mon) 13:08:52|NO.76481

ありがとうございました!



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