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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1118
まぁしぃ当たり判定の範囲と判定の削除12解決


まぁしぃ

リンク

2011/11/18(Fri) 00:41:24|NO.43081

今横スクロールのシューティングゲームを作成しています。
背景スクロールなどはできてきたのですが、大体できてからわかったのですが
当たり判定の範囲がおかしい・・・

当たって消えるというのはできるでのですが、
中央(画像の真ん中横ライン)を貫通してしまう。

というのがいまさらになってわかったのと

弾と敵が当たった後当たり判定が消えていない

というのが起きてしまい、自分で範囲がおかしいのかなと思ったのですが
よくわからなくなってしまいましたので
ヒントでもかまいませんので教えてください><




//敵出現1( 赤 ) if teki = 0{ teki = 1 teki_x(cnt) = 800 teki_y(cnt) = rnd(321)+20 } //敵の処理1( 赤 ) if teki_x < -40 :teki = 0 if teki = 1{ if stg = 1 :teki_x(cnt)-7 :pos teki_x,teki_y :celput 2,1 if stg = 2 :teki_x(cnt)-10 :pos teki_x,teki_y :celput 2,1 if stg > 2 :teki_x(cnt)-13 :pos teki_x,teki_y :celput 2,1 } //当たり判定(敵機1) if teki = 1 if ( ( (tama_x+10) > teki_x && (tama_x+10) < teki_x + 40) || ( teki_x > (tama_x+10) && teki_x < (tama_x+10)+23)){ //敵 || 弾 if ( ( (tama_y+15) > teki_y && (tama_y+15) < teki_y + 40) || ( teki_y > (tama_y+15) && teki_y < (tama_y+15)+8)){ //敵 || 弾 teki = 0 color 220,220,220 :boxf teki_x,teki_y,teki_x+40,teki_y+40 tama(cnt) = 0 bakuha1_x = teki_x bakuha1_y = teki_y bakuha1(cnt) = 10 ska++ } } if teki = 1 if ( ( (teki_x+5) > (x+10) && (teki_x+5) < (x+10) + 20) || ( (x+10) > (teki_x+5) && (x+10) < (teki_x+5) + 30)){ //敵 || 自機 if ( ( (teki_y+5) > (y+10) && (teki_y+5) < (y+10) + 20) || ( (y+10) > (teki_y+5) && (y+10) < (teki_y+5) + 30)){ //敵 || 自機 jiki(cnt)-- teki = 0 } }



この記事に返信する


暇人

リンク

2011/11/18(Fri) 01:21:53|NO.43082

何が起きてるのか取りあえず見えるようにする事から

teki_y=15 mes ( ( (tama_y+15) > teki_y && (tama_y+15) < teki_y + 40)) mes ( teki_y > (tama_y+15) && teki_y < (tama_y+15)+8) mes ( ( (tama_y+15) >= teki_y && (tama_y+15) < teki_y + 40)) mes ( teki_y >= (tama_y+15) && teki_y < (tama_y+15)+8)

>弾と敵が当たった後当たり判定が消えていない
>if teki = 1
ifしてるけど続く命令も{もないから無意味になってる



まぁしぃ

リンク

2011/11/18(Fri) 20:58:05|NO.43105

暇人さん回答ありがとうございます><
ですが申し訳ないです;
プログラムの解説お願いします;;



暇人

リンク

2011/11/18(Fri) 22:15:52|NO.43106

うーん

teki_y=15 mes (tama_y+15) > teki_y mes (tama_y+15) >= teki_y
これの違い分からない?
未満と以下の違い

>if teki = 1
これは1以外なら後に続く処理をやらなくしたいんだろけど
{}で囲って無いから何の意味も成してない

後teki_x(cnt)とteki_x(_yの方も)が混在していて全てにおいてまともな動作してるか疑わしい



まぁしぃ

リンク

2011/11/18(Fri) 23:06:00|NO.43107

あぁ!!
わかりましたww
これを直せば敵と自機が同じ座標の時も当たり判定が作ってことですよね??

teki_y=15 mes (tama_y+15) > teki_y mes (tama_y+15) >= teki_y
で1方が当たるって事ですよね??


>後teki_x(cnt)とteki_x(_yの方も)が混在していて全てにおいてまともな動作してるか疑わしい
というのは、(cnt)を使うならすべてに(cnt)をつけて統一させたほうがいいんですか??



暇人

リンク

2011/11/19(Sat) 01:32:40|NO.43109

>で1方が当たるって事ですよね??
そう

>というのは、(cnt)を使うならすべてに(cnt)をつけて統一させたほうがいいんですか??
一部だけ見せられてもcntあるのが正しいのか無いのが正しいのかなんとも言えない

>if teki = 1
こっちの事も分かった?
敵あるなしに関係なく素通りして判定を行ってる



まぁしぃ

リンク

2011/11/19(Sat) 18:31:45|NO.43125

>if teki = 1
>敵あるなしに関係なく素通りして判定を行ってる
{}で当たり判定の部分をくくってないからってことですよね??
言われて気づきましたww ありがとうございます^^

teki_x,teki_y を使っている部分は↓の部分です;


//敵機初期設定 dim teki dim teki_x dim teki_y //敵出現1( 赤 ) if teki = 0{ teki = 1 teki_x(cnt) = 800 teki_y(cnt) = rnd(321)+20 } //敵の処理1( 赤 ) if teki_x < -40 :teki = 0 if teki = 1{ if stg = 1 :teki_x(cnt)-7 :pos teki_x,teki_y :celput 2,1 if stg = 2 :teki_x(cnt)-10 :pos teki_x,teki_y :celput 2,1 if stg > 2 :teki_x(cnt)-13 :pos teki_x,teki_y :celput 2,1 } //当たり判定(敵機1) if teki = 1{ if ( ( (tama_x+10) > teki_x && (tama_x+10) < teki_x + 40) || ( teki_x > (tama_x+10) && teki_x < (tama_x+10)+23)){ //敵 || 弾 if ( ( (tama_y+15) > teki_y && (tama_y+15) < teki_y + 40) || ( teki_y > (tama_y+15) && teki_y < (tama_y+15)+8)){ //敵 || 弾 teki = 0 color 220,220,220 :boxf teki_x,teki_y,teki_x+40,teki_y+40 tama(cnt) = 0 bakuha1_x = teki_x bakuha1_y = teki_y bakuha1(cnt) = 10 ska++ } } } if teki = 1{ if ( ( (teki_x+5) >= (x+10) && (teki_x+5) <= (x+10) + 20) || ( (x+10) >= (teki_x+5) && (x+10) <= (teki_x+5) + 30)){ if ( ( (teki_y+5) >= (y+10) && (teki_y+5) <= (y+10) + 20) || ( (y+10) >= (teki_y+5) && (y+10) <= (teki_y+5) + 30)){ jiki(cnt)-- teki = 0 } } }



まぁしぃ

リンク

2011/11/19(Sat) 18:32:56|NO.43126

すみません;
当たり判定の部分はまだ修正していません;



暇人

リンク

2011/11/19(Sat) 19:00:56|NO.43127

だから一部分抜き出しても判断できないと・・・
repeat、loop間じゃ無いならcntは常に0だから現状では影響はしてない
でも無意味だし読みにくいし他人が見たら意味不明
cntの意味分かってて使ってるの?
どっかからコピペしてそのまま?



まぁしぃ

リンク

2011/11/19(Sat) 20:25:52|NO.43129

このプログラムはrepeat,loop間でやってます;

cntに関しては理解できてないです(汗
なのでそのままでほかのプログラムの部分は
いろいろなとこから見て横型用に変えてやっています;

一応今から弾の数を増やそうとしているのでcntが関係してくるのがわかってるので
調べていく予定です^^



ぬこ

リンク

2011/11/19(Sat) 20:44:52|NO.43130

cntは実際に表示してみると分かると思います。

repeat 5 mes cnt loop
弾が増えると

tama(1) = 0 tama(2) = 0 tama(3) = 0 tama(4) = 0 tama(5) = 0
こういうふうに書かないといけませんが、cntを使うと

repeat 5 tama(cnt) = 0 loop
このように短く書けて数が増えても簡単に対応できます。



暇人

リンク

2011/11/19(Sat) 21:14:14|NO.43131

>このプログラムはrepeat,loop間でやってます;
repeatでもrepeat 1なら今は問題出ないが
抜き出した部分にrepeatが無いから他人からは分からない



まぁしぃ

リンク

2011/11/19(Sat) 21:50:00|NO.43135

ぬこさんcnt説明ありがとうございます^^

暇人さんながながとお付き合いいただきありがとうございます^^

あとは自分で何とか考えてやってみようと思います!!

また行き詰まってしまったときは気が向いたらでかまいませんので
教えていただければうれしいです^^

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



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