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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0407
no name当たり判定がうまく作れません6解決


no name

リンク

2012/4/7(Sat) 21:21:11|NO.45940

今初めてゲームをつくろうとシューティングゲームを作っているんですが、当たり判定の処理
がうまくいきません()。理由と解決法を教えて下さいm(_ _)mスクリプトは以下です。(不要部分の多い長いスクリプトの投稿は
ご遠慮くださいと書いてあったんですがどこが不要かわかりませんでしたので長くなってしまったらすいません)

screen 0,800,500//画面の大きさ
randomize//ランダム化
//自機の場所
jiki@yoko = 300
jiki@tate = 450

// 変数
//たま用
shot@f = 0
shot@yoko = 0
shot@tate = 0
//適用
tekimax = 50
dim teki@f , tekimax
dim teki@yoko , tekimax
dim teki@tate , tekimax

//敵の出現
if jikan >= 5{//f
repeat tekimax//98
if teki@f(cnt) = 0 {//g
teki@yoko(cnt) = rnd(800)
teki@tate(cnt) = - 5
teki@f(cnt) = 1
jikan = 0
break

}

loop

}


//弾の発射
if shot@start = 1{
shot@f = 1
shot@yoko = jiki@yoko - 8
shot@tate = jiki@tate - 8
}




//画面外に行かせない
if jiki@yoko > 800 :jiki@yoko = 800
if jiki@yoko < 0:jiki@yoko = 0
if jiki@tate > 500 :jiki@tate = 500
if jiki@tate < 0:jiki@tate = 0




//弾の描画
if shot@f = 1{
pos shot@yoko , shot@tate
color 0,0,0
mes "弾"

}
//玉を上に

if shot@f = 1{
shot@tate - 25
if shot@tate < 0:shot@f = 0
}

//弾と敵当たり判定
i = 0
if shot@f = 1{
repeat tekimax
if teki@f(cnt) = 1{
tmp = teki@yoko(cnt) - shot@yoko
tmp2 = teki@tate(cnt) - shot@tate
tmp * tmp
tmp2 * tmp2
tmp3 = tmp + tmp2
if tmp3 < 64 {
teki@f(cnt) = 0
shot@f = 0
}
}

loop

}



この記事に返信する


no name

リンク

2012/4/7(Sat) 21:25:04|NO.45941

すいません!不具合の内容はショットが当たる敵と当たらない敵がいるという内容です。
書き忘れました・・・



cats

リンク

2012/4/7(Sat) 21:50:16|NO.45942

当たり判定は作ったことが少ししかないので分からないのですが
当たり判定が敵の一部だけになっているのではないでしょうか。
それだと敵の上には当たっても下には当たらないようなことになります。
当たり判定について書かれたサイトはたくさんあるので調べてみたらいいと思います。



暇人

リンク

2012/4/7(Sat) 22:25:03|NO.45943

>shot@tate - 25

>if tmp3 < 64 {

弾の移動速度が判定距離を越えてる
1フレームの移動で敵を飛び越してる


tmp=8 tmp2=0 tmp * tmp tmp2 * tmp2 tmp3 = tmp + tmp2 mes tmp3 mes sqrt(tmp3)
8ドットずれただけで当たらない
判定距離を64にしたいならsqrt()で変換する

変数の内容等は常に表示して、自分の意図した動作になってないところを、自分で探せるようにすると良い

後、@は特別な意味が有るから無闇には使わないで
shot_yoko とかにした方が良い


そのまま動かせないスクリプト貼って聞くのは
正確な答えや答え自体受けられない事もあるから気を付けた方が良い
今回答えてるのも実際に動かしていないから問題がこれだけかは分からない



no name

リンク

2012/4/7(Sat) 22:52:53|NO.45944

>>catsさん
返信ありがとうございます。当たり判定については散々調べましたがわかりませんでした・・・
>>暇人さん
本当に申し訳ないのですが僕の知識不足であまり意味が理解できません。
sqrtについて少し調べましたが、どうしてもわかりませんでした。
本当にすいません。(言い訳に聞こえるかも知れませんが僕はまだ小学6年生なので中学校
以降で習う知識はわからないのです。)



暇人

リンク

2012/4/7(Sat) 23:34:39|NO.45947

具体的には

>if tmp3 < 64 {
ここのを

if sqrt(tmp3) < 64 {
にする

説明は
sqrt 距離
で検索すればいくらでもあるから省略
とりあえずは使い方だけ分かればそれで良い



no name

リンク

2012/4/8(Sun) 09:08:50|NO.45950

本当にありがとうございました!!
解決しました!!



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