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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0517
流星群敵との当たり判定2解決


流星群

リンク

2012/5/17(Thu) 22:20:27|NO.46677

シューティングゲームで
一度つくったことがあるんですが
いまするとうまくできません教えてもらってよろしいでしょうか??


screen 0,640,480,16,300,100 gosub *Debug ;テスト中はこれをオンにすると便利 gsel 0,1 title "SLIME JUMP [スライム ジャンプ]" *world color 0,0,0 boxf pos 0,0 color 255,255,0 font "MS ゴシック",32,16 mes "1,始めの塔\n\n2,封印の洞窟\n\n3,魔王城\n\n" color 0,0,100 mes "行きたいステージの\n番号を選んでください" *stageselect getkey KEY,49 if KEY=1{ MAPCNT=0 : DungeonName="始めの塔" : goto*stagestart} getkey KEY,50 if KEY=1{ MAPCNT=3 : DungeonName="封印の洞窟" : goto*stagestart } getkey KEY,51 if KEY=1{ MAPCNT=8 : DungeonName="魔王城" ;: dialog"未完成" goto*stagestart } getkey KEY,48 if KEY=1{ MAPCNT=-2 : DungeonName="練習場" goto*stagestart } await 1 goto*stageselect stop *stagestart color 0,0,0 boxf buf_key=0 myHP=3 movespeed=0 mypicturecnt=0 JUMP=0 JUMPcnt=0 waittime=0 my_dir=1 mapx=20 mapy=15 dim map,20,15 dim fire,3 dim fire_x,3 dim fire_y,3 dim firespeed_x,3 dim firespeed_y,3 dim firedir,3 repeat 3 fire_y=440 firedir(cnt)=2 loop dim BOSS dim BOSS_x dim BOSS_y dim flag,15 *setting repeat 15 flag(cnt)=0 loop color 0,0,0 gradf 0,0,640,480,1,$000000,$a0a0a0 redraw 0 i=0 dim map,20,15 ;mapx=20 ;mapy=15 ;dim map,20,15 MAPCNT++ MAPNAME="MAP_"+MAPCNT+".txt" notesel buf_1 if MAPCNT>0{ ;特殊マップ以外はこれでよみこみ noteload MAPNAME,3000 //MAP_(MAPCNT).txtの内容をbufに読み込む repeat noteinfo(0) noteget row,i //bufのi行目のデータをrowに代入する repeat mapx getstr tip,row,index,',' index += strsize map(cnt,i) = int(tip) loop i++ index = 0 loop } if MAPCNT=-1{ noteload "practice_stage.txt",3000 //MAP_(MAPCNT).txtの内容をbufに読み込む repeat noteinfo(0) noteget row,i //bufのi行目のデータをrowに代入する repeat mapx getstr tip,row,index,',' index += strsize map(cnt,i) = int(tip) loop i++ index = 0 loop } gosub *draw_map ;title ""+MAPCNT if MAPCNT=-1 {my_x=32 : my_xx=2.0 : my_y=384 : my=yy=12.0} if MAPCNT=1 {my_x=32 : my_xx=2.0 : my_y=384 : my=yy=12.0} if MAPCNT=2 {my_x=384 : my_y=416 : JUMP=1 : JUMPcnt=13 : my_xx=12 :my_yy=13 } if MAPCNT=3 {my_x=576 : my_y=288 : my_xx=14 :my_yy=9 } if MAPCNT=4 {my_x=32 : my_y=32 : my_xx=1 :my_yy=1 } if MAPCNT=5 {my_x=288 : my_y=32 : my_xx=9 :my_yy=1 } if MAPCNT=6 {my_x=288 : my_y=32 : my_xx=9 :my_yy=1 } if MAPCNT=7 {my_x=32 : my_xx=1: my_y=384 : my=yy=13 } if MAPCNT=8 {my_x=32 : my_xx=1: my_y=320 : my=yy=10 } if MAPCNT=9 {my_x=32 : my_xx=1: my_y=224 : my=yy=7 fire(0)=1 : fire_x(0)=160 : fire_y(0)=288 } *MAIN redraw 0 my_xx=(my_x+16)/32 getkey KEY,37 if KEY=1 :my_xx=(my_x+31)/32 getkey KEY,39 if KEY=1 :my_xx=(my_x+3)/32 my_yy=(my_y+4)/32 if JUMPcnt>1 : my_yy=(my_y+25-1)/32 my_xx=int(my_xx) my_yy=int(my_yy) ;title "座標"+my_xx+","+my_yy color 0,0,0 gradf 0,0,640,240,1,$000000,$505050 gradf 0,240,640,480,1,$505050,$000000 color 255,255,255 mypicturecnt+1 color 0,50,100 gmode 4,,,256 gosub *draw_map pos my_x,my_y color 0,200,0 font "",32,16 mes "●" gosub*MyAction gosub*fireaction if movespeed < 0 { my_x+(int(movespeed/2)) if map((my_x-2)/32,(my_y+16)/32) = 1 : my_x-(int(movespeed/2)) if map((my_x-2)/32,(my_y+16)/32) = 7 : my_x-(int(movespeed/2)) } if movespeed > 0 { my_x+(int(movespeed/2)) if map((my_x+34)/32,(my_y+16)/32) = 1 : my_x-(int(movespeed/2)) if map((my_x+31)/32,(my_y+16)/32) = 7 : my_x-(int(movespeed/2)) } color 255,255,255 font "MS ゴシック",32,16 pos 394,48 if MAPCNT<4 :mes DungeonName+MAPCNT+"F" if MAPCNT>3 & MAPCNT<9 :mes DungeonName+"B"+(MAPCNT-3)+"F" my_xx=(my_x+16)/32 my_yy=(my_y+8)/32 my_xx=int(my_xx) my_yy=int(my_yy) if map(my_xx,my_yy) ! 0 : my_yy-16 if my_x/32<0 : my_x=0 if my_y/32<0 : my_x=0 await 1.6666666666666666666666666666667 redraw 1 gosub *MAP_EVENT goto *MAIN *MyAction
repeat 3
if fire_x(cnt) >= my_x{
if my_x <= (fire_x(cnt)+32){
if fire_y(cnt) >= my_y{
if my_y <= (fire_y(cnt)+32){
title "当たった"+rnd(100)
}}
}}
loop

getkey KEY,37 if KEY=1 { if movespeed = 0 : movespeed-2 if movespeed > -12: movespeed-- my_dir=0 if map(my_x/32,my_y/32)!0 : my_x+(movespeed/2) } if KEY=0 : buf_key++ getkey KEY,39 if KEY=1 { if movespeed = 0 : movespeed+2 if movespeed < 12: movespeed++ my_dir=1 if map(my_x/32,my_y/32)!0 : my_x-(movespeed/2) } if KEY=0 : buf_key++ getkey KEY,90 if KEY=1 { if map((my_x+36)/32,my_yy) = 7 & flag(MAPCNT)=1{ map((my_x+36)/32,my_yy) = 0 } if map((my_x-16)/32,my_yy) = 7 & flag(MAPCNT)=1{ map((my_x-16)/32,my_yy) = 0 }} getkey KEY,88 if JUMP=0 & KEY=1 { if map(my_xx,my_yy+1) = 1 { mmplay 10 : JUMP=1 : JUMPcnt=13} } if JUMPcnt>0{ if my_yy>0{ if map(my_xx,my_yy-1) ! 1 :my_y-7 } JUMPcnt-- if JUMPcnt=0 :waittime=13 } if JUMPcnt<1 & waittime>0 { waittime-- if waittime=0 : waittime=-1 } if JUMP=1 & JUMPcnt<1 & waittime=-1: JUMP=0 if my_yy<14{ if map((my_x+8)/32,((my_y+33)/32)) ! 1 & map((my_x+24)/32,((my_y+33)/32)) ! 1 & JUMPcnt<1 : my_y+8 } if my_yy=14 & JUMPcnt<1 : my_y+8 if buf_key=2 & movespeed>0 : movespeed-- if buf_key=2 & movespeed<0 : movespeed++ buf_key=0 return *GAMEOVER font "",64,16 pos 163,203 color 200,200,200 mes "GAME OVER" color 255,255,255 pos 160,200 mes "GAME OVER" redraw 1 wait 100 dialog "もう一度しますか??",2,"再挑戦??" if stat=6 {MAPCNT-- : goto*setting} if stat=7 : end if stat=0 : end stop *Debug screen 10,128,132,8,950,300 title "デバッグウィンドウ" objsize 128,32,8 button "次のフロアへ",*Debug_1 mes "" button "ステージ選択へ",*Debug_2 mes "" button "自滅",*Debug_3 return *Debug_1 goto*setting stop *Debug_2 goto*world stop *Debug_3 goto*GAMEOVER stop *fireaction repeat 3 if fire(cnt)=1{ if map((fire_x(cnt)-4)/32,(fire_y(cnt)+16)/32) = 0 : firespeed_x(cnt)-- if map((fire_x(cnt)+36)/32,(fire_y(cnt)+16)/32) = 0 : firespeed_x(cnt)++ fire_x(cnt)+firespeed_x(cnt) pos fire_x(cnt),fire_y(cnt) color 255,0,0 mes "炎" } loop return *MAP_EVENT my_yy=(my_y+31)/32 if MAPCNT=2 & my_xx=12 & my_yy=15 {MAPCNT-2 : my_x=384 : my_y=64 : goto *setting} if my_yy=15 : goto *GAMEOVER if map((my_x+16)/32,(my_y+16)/32) = 4 : goto *GAMEOVER if my_yy=15 { dialog "GAMEOVER",,"残念" : dialog "もう一度しますか??",2,"再挑戦??" if stat=6 {MAPCNT-- : goto*setting} if stat=7 : end if stat=0 : end } my_yy=(my_y+30)/32 if MAPNAME="MAP_1.txt" & ((my_y+16)/32)=0 { my_x=384 : my_y=416 : JUMP=1 : JUMPcnt=13 my_xx=12 :my_yy=13 : goto*setting } if MAPCNT=3 & ((my_x+30)/32) = 19 {MAPCNT-2 : goto*setting} if MAPNAME="MAP_2.txt" & my_xx=0 { my_x=448 : my_y=288 my_xx=14 :my_yy=9 : goto*setting } if map((my_x+16)/32,(my_y+16)/32)=3 : goto *setting if map((my_x+16)/32,(my_y+16)/32)=2 {dialog "お宝を見つけた!!\nクリア" : goto*world} if map((my_x+18)/32,(my_y+4)/32)=5 & JUMPcnt<1 & waittime<1{ mmplay 10 : JUMP=1 : JUMPcnt=22} if map((my_x+4)/32,(my_y+4)/32)=6 {dialog "鍵を見つけた。" : flag(MAPCNT)=1 map((my_x+4)/32,(my_y+4)/32)=0 } return *draw_map gmode 4,0,0,256 color 0,50,100 x = 0 : y = 0 repeat mapy j = cnt repeat mapx i = cnt pos x,y color map(i,j)*60,map(i,j)*60,map(i,j)*60 if ginfo_r=60 & ginfo_g=60 & ginfo_b=60 {color 63,63,63 : boxf x,y,x+32,y+32 : color 127,127,127 : boxf x+1,y+1,x+31,y+31} if ginfo_r=120 & ginfo_g=120 & ginfo_b=120 {color 255,255,0 : font "",32,16 : mes "宝"} if ginfo_r=180 & ginfo_g=180 & ginfo_b=180 {color 0,0,0 : boxf x,y,x+32,y+32 : pos x,y : color 0,100,100 : mes "移"} if ginfo_r=240 & ginfo_g=240 & ginfo_b=240 {color 100,0,100 : boxf x,y,x+32,y+32} x += 32 loop x = 0 : y += 32 loop return

文字を普通にしている部分がわからないところです

これの実行に必要なものがひとつだけあるので
おねがいします


1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,1 1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1 1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1 1,1,1,1,1,1,4,1,4,1,4,1,4,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
これを"MAP_9.txt"というファイル名で保存してください

そして実行してから
"3"を押すと

敵に当たってないのに
ウィンドウのタイトルを見ればわかると思いますが
当たっていることになっているのです

簡単なコピペだけじゃ実行できなくて面倒ですが
よかったら
回答お願いします



この記事に返信する


ZAP

リンク

2012/5/17(Thu) 22:57:35|NO.46678

問題のif文が4行並んでいる箇所の
1行目と3行目を、条件式の意味を変えないようにして左右を入れ替えてみると、



repeat 3
if my_x <= fire_x(cnt) {
if my_x <= (fire_x(cnt)+32){
if my_y <= fire_y(cnt) {
if my_y <= (fire_y(cnt)+32){
title "当たった"+rnd(100)
}
}
}
}
loop


こうなりますよね。
おそらくこれでは意図した当たり判定になっていないはずです。
条件式の意味をゆっくり見て考えてみてください。



流星群

リンク

2012/5/18(Fri) 16:23:46|NO.46690

おおおおお、
できました!!

repeat 3 if fire_x(cnt) <= my_x{ if my_x <= (fire_x(cnt)+32){ if fire_y(cnt) <= my_y{ if my_y <= (fire_y(cnt)+32){ title ""+rnd(100) }} }} loop

これでいいんですね!!
ありがとうございます



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