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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0418
DAIKANSTGの当たり判定処理が反映されません8解決


DAIKAN

リンク

2012/4/18(Wed) 17:10:07|NO.46140

シューティングゲームの当たり判定について、今製作中です。
そこで、コンパイルエラーは出ないのですが、
なぜか自機と弾が接触したときの当たり判定が仕事をしないという症状を発症してしまいました。
1つめの弾の当たり判定はうまくいきました。
それを真似して、2つめの弾の当たり判定も確かめましたが、それもうまくいきました。
ですが、3つめの弾の当たり判定を確かめたとき、3つめの弾の当たり判定がないことに気がつきました。
3つめの当たり判定処理を見直しましたが、僕が見る限りでは抜けたところはありませんでした。
3つめの当たり判定も、1つめの当たり判定を真似して作りました。
これがそのスクリプトです。
ご回答よろしくおねがいします。

*set
screen 0,800,800,0,500,100
title "神々が愛したドナ想郷 Level★ Stage1  〜八千億のドナの神〜"

//ロード背景
color 0,0,255 : boxf
pos 10,10 : font "MS 明朝",30,0 : color 255,0,0 : mes "NOW LOADING..."

//画像ファイルを読み込む
buffer 2
picload "images/systemimage1.jpg" : gsel 0,1
buffer 3
picload "images/background1.bmp" : gsel 0,1
buffer 4
picload "images/jiki.bmp" : gsel 0,1
buffer 5
picload "images/moji1.bmp" : gsel 0,1
buffer 6
picload "images/tama1.bmp" : gsel 0,1
//音声ファイルを読み込む
mmload "sounds/dv1.wav",1
mmload "sounds/bgm1.mp3",2

//変数を作成
dim v,100
dim sys,100
dim tekix,100
dim tekiy,100
dim flag,100
dim i,100
dim tamax,100
dim tamay,100
dim n,1000
xx=390 : yy=650
speed = 2
hp = 10
score = 0
muteki = 0
;n


//bgm再生
mmplay 2

wait 100

//goto main
goto *main

*main
repeat

//*下レイヤーから描画していきます
//スコアを増やす
score+=1

//背景
color 255,255,255 : gmode 4,0,0,256
pos 0,0 : gcopy 3,0,0,500,804

//自機の設定//
//自機操作
getkey left,37
getkey up,38
getkey right,39
getkey down,40
if(left=1) : xx-=speed
if(up=1) : yy-=speed
if(right=1) : xx+=speed
if(down=1) : yy+=speed

//自機表示
color 255,255,255 : gmode 4,0,0,256
pos xx,yy : gcopy 4,0,0,16,25

//自機移動制限
if(xx>480) : xx-=speed
if(xx<10) : xx+=speed
if(yy>760) : yy-=speed
if(yy<30) : yy+=speed

//自機の設定ここまで//

//文字演出設定
if(sys(0)=0){
color 255,255,255 : gmode 4,0,0,256
pos 230,100 : gcopy 5,0,0,59,417
}
;ループ回数が一定値以上なら、文字を消す
if(cnt>200) : sys(0)=1

//弾表示処理//
//弾表示
if(flag(0)=0){;フラグ0
color 255,255,255 : gmode 4,0,0,256
pos 30+tamax(0),60+tamay(0) : gcopy 6,0,0,20,20
tamax(0)+=1 : tamay(0)+=3
pos 30+tamax(1),60+tamay(1) : gcopy 6,0,0,20,20
tamax(1)+=2 : tamay(1)+=3
pos 30+tamax(2),60+tamay(2) : gcopy 6,0,0,20,20
tamax(2)+=1 : tamay(2)+=1


;条件で指定した全ての弾が画面上から消えれば弾を消去
if(tamay(0)>800)&(tamay(1)>800)&(tamay(2)>800){
flag(0)=1
}


}
//当たり判定
if(flag(0)=0){
//tama1
if(tamax(0)+20>=xx)&(tamax(0)-5<=xx){
if(tamay(0)+20>=yy)&(tamay(0)-5<=yy){
hp-=1 : xx=390 : yy=650 : mmplay 1
}
}
if(tamax(1)+20>=xx)&(tamax(1)-5<=xx){
if(tamay(1)+20>=yy)&(tamay(1)-5<=yy){
hp-=1 : xx=390 : yy=650 : mmplay 1
}
}
if(tamax(2)+20>=xx)&(tamax(2)-5<=xx){
if(tamay(2)+20>=yy)&(tamay(2)-5<=yy){
hp-=1 : xx=390 : yy=650 : mmplay 1
}
}

}



//サイドバー表示
//*これは弾幕表示処理より後に書く
color 255,255,255 : gmode 4,0,0,256
pos 500,-30 : gcopy 2,0,0,1024,1280
;プレイヤーHP
color 0,0,255 : font "MS ゴシック",35 : pos 650,30 : mes ""+hp+""
;スコア
color 0,100,255 : font "MS ゴシック",35 : pos 530,160 : mes ""+score+""


//ループ終了
redraw 1
await 15
redraw 0
loop



この記事に返信する


spider

リンク

2012/4/18(Wed) 18:01:37|NO.46141

すいません。いいたいことが3つほどあります。

pre~/preでスクリプト部分を囲ってください。(見づらいです)
∪賤僂硫菫は私はもっておりません。
画像がなくても実行できるようにしましょう。
boxfなどを使って。
スクリプト全体を書く必要はあったでしょうか?

 銑を考慮して作り直してくれないと、
私はこのスクリプトの構造がすぐに理解できません。



ump45

リンク

2012/4/18(Wed) 19:51:08|NO.46142

プログラムを動かすのにいらないものを省きましょう。
それをしていると、自分で解決できることもありますし。
bgmやタイトルなどはいらないですよね



@key

リンク

2012/4/18(Wed) 21:05:21|NO.46144

プログラム読まないで質問だけから判断したんだけど、
東方みたいに当たり判定が円同士なら
「自機と弾の距離が(自機の当たり判定の半径+弾の当たり判定の半径)以下になったら当たり」
という方法のほうがいいと思うよ

間の距離を出す方法なんかは調べてね



暇人

リンク

2012/4/18(Wed) 22:05:50|NO.46146

>3つめの弾の当たり判定がないことに気がつきました。
判定が無いんじゃなくて見た目とずれてるだけ
1,2も同じくずれてるけど弾の速度が速いから気付かないだけ

>pos 30+tamax(0),60+tamay(0) : gcopy 6,0,0,20,20
弾の表示は実際の座標よりずらしてるのに
>if(tamax(0)+20>=xx)&(tamax(0)-5<=xx){
判定は実際の座標を使ってるから見た目上の判定場所がずれる



TMKL

リンク

2012/4/18(Wed) 22:26:47|NO.46147

う〜ん、
指定したposの中心に弾を表示しようとして、失敗したんですかね

pset命令で点を表示して、どれくらいズレてるのか確認することをお勧めします

あとは、

表示
移動
判定

の順で処理しているので、
さらにズレが広がってます

表示
判定
移動

のほうがいいです
(自機の制限等を除く)



暇人

リンク

2012/4/18(Wed) 22:27:55|NO.46148


boxf tamax(2)-5,tamay(2)-5,tamax(2)+20,tamay(2)+20
とかやって通常見えないものを視覚化すれば
何処に問題あるか発見しやすい



TMKL

リンク

2012/4/18(Wed) 22:33:21|NO.46149

指定したposの中心に弾:誤
指定したposを中心に弾:正



DAIKAN

リンク

2012/4/19(Thu) 16:00:10|NO.46151

ありがとうございました。
もう一度スクリプトを組んでみたところ、3回目でようやく解決しました。
スクリプト見づらくて申し訳ありませんでした。反省しています。
みなさんのご回答、本当に役に立ちました!



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