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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0319
ノダッシー円同士の当たり判定3未解決


ノダッシー

リンク

2016/3/19(Sat) 23:57:29|NO.74976

知恵袋で質問が付かなかった為、こちらにマルチで申し訳ありませんが
やはりこちらの方が的確な回答が頂けると思ったので質問させて下さい

円同士の当たり判定を取りたいのですが、変な所で当たり判定が出ます、間違っている個所を教えて下さい
やっている事は円Aがマウスで自由に動かせる、円Bは固定です
よろしくお願いします
;一辺の長さを設定 100
yoko = 100
tate = 100

*main
redraw 0
;マウスの座標
mouse_x = mousex : mouse_y = mousey

;画面を消去
color 255,255,255
boxf



;------------------------------------
;マウスにくっついてくる円Aを描画する
;-------------------------------------
color 0,255,255
circle mouse_x ,mouse_y ,mouse_x + yoko , mouse_y + tate
;円Aの中心点を描画する
color 255,0,0
tyuusinntenn_Ax = mouse_x + yoko / 2
tyuusinntenn_Ay = mouse_y + tate / 2
;円Aの中心座標↓
pset tyuusinntenn_Ax, tyuusinntenn_Ay
;円Aの半径を求める。円の半径=中心点xかyどちらでも可+横か縦の長さ
enn_Ar = tyuusinntennAx + yoko

;-------------------
;固定の円Bを描画する
;-------------------
color 100,100,100
circle 400 ,250 ,500 , 350
;円の中心座標
tyuusinntenn_Bx = 450
tyuusinntenn_By = 300
color 255,0,0
pset tyuusinntenn_Bx,tyuusinntenn_By


;円Bの半径を求める。円の半径=中心点xかyどちらでも可+横か縦の長さ
enn_Br = tyuusinntennBx + yoko

;----------------------------
;中心点Aと中心点Bに線を引く
;----------------------------
color 0,0,0
line tyuusinntennAx,tyuusinntennAy,tyuusinntenn_Bx,tyuusinntenn_By
;↑何故かリアルタイムに更新されない

;------------
;当たり判定
;------------
kyori = sqrt( ( (tyuusinntenn_Bx - tyuusinntenn_Ax) * (tyuusinntenn_Bx - tyuusinntenn_Ax) ) + ( (tyuusinntenn_By - tyuusinntenn_Ay) * (tyuusinntenn_By - tyuusinntenn_Ay) ) )
ans = (enn_Ar + enn_Br)

;判定
if (kyori >= ans){
pos 300,0
mes "当たり"
} else {
pos 300,0
mes "当たってない"
}

pos 0,0
color 0,0,0
mes "円Aから円Bまでの距離" + kyori
mes "円Aの半径" + enn_Ar
mes "円Bの半径" + enn_Br
mes mouse_x
mes mouse_y



redraw
wait 1
goto *main



この記事に返信する


暇人

リンク

2016/3/20(Sun) 02:01:31|NO.74978

enn_Ar、enn_Brが半径ではなく直径が入ってるから判定距離が倍になってる
(表示してるのに・・・)
更にif (kyori >= ans){ の不等号が逆

>tyuusinntennAx,tyuusinntennAy,tyuusinntenn_Bx,tyuusinntenn_By
> ;↑何故かリアルタイムに更新されない

↓ん?
>tyuusinntenn_Ax
>tyuusinntennAx
>tyuusinntenn_Ay
>tyuusinntennAy

>tyuusinntennBx
>tyuusinntenn_Bx



ノダッシー

リンク

2016/3/21(Mon) 22:00:35|NO.75017

レスありがとうございます!!
何度見直しても分からない時って自分では分からないものなんですね(><;)
ご指摘頂いた部分を修正したら、あんなに時間を掛けて悩んでいた時間が一瞬で…!
ありがとうございました
一応修正したコードは残しておきます(^^)

yoko = 100
tate = 100

*main
redraw 0
;マウスの座標
mouse_x = mousex : mouse_y = mousey

;画面を消去
color 255,255,255
boxf



;------------------------------------
;マウスにくっついてくる円Aを描画する
;-------------------------------------
color 0,255,255
circle mouse_x ,mouse_y ,mouse_x + yoko , mouse_y + tate
;円Aの中心点を描画する
color 255,0,0
tyuusinntenn_Ax = mouse_x + yoko / 2
tyuusinntenn_Ay = mouse_y + tate / 2
;円Aの中心座標↓
pset tyuusinntenn_Ax, tyuusinntenn_Ay
;円Aの半径を求める。円の半径=中心点xかyどちらでも可+横か縦の長さ
enn_Ar = tyuusinntennAx + (yoko/2)

;-------------------
;固定の円Bを描画する
;-------------------
color 100,100,100
circle 400 ,250 ,500 , 350
;円の中心座標
tyuusinntenn_Bx = 450
tyuusinntenn_By = 300
color 255,0,0
pset tyuusinntenn_Bx,tyuusinntenn_By


;円Bの半径を求める。円の半径=中心点xかyどちらでも可+横か縦の長さ
enn_Br = tyuusinntennBx + (yoko/2)

;----------------------------
;中心点Aと中心点Bに線を引く
;----------------------------
color 0,0,0
line tyuusinntenn_Ax,tyuusinntenn_Ay,tyuusinntenn_Bx,tyuusinntenn_By

;------------
;当たり判定
;------------
kyori = sqrt( ( (tyuusinntenn_Bx - tyuusinntenn_Ax) * (tyuusinntenn_Bx - tyuusinntenn_Ax) ) + ( (tyuusinntenn_By - tyuusinntenn_Ay) * (tyuusinntenn_By - tyuusinntenn_Ay) ) )
ans = (enn_Ar + enn_Br)

;判定
if (kyori <= ans){
pos 300,0
mes "当たり"
} else {
pos 300,0
mes "当たってない"
}

pos 0,0
color 0,0,0
mes "円Aから円Bまでの距離" + kyori
mes "円Aの半径" + enn_Ar
mes "円Bの半径" + enn_Br
mes mouse_x
mes mouse_y



redraw
wait 1
goto *main



黒猫

リンク

2016/3/24(Thu) 23:48:34|NO.75061

ちょっと気になったので

>円の半径=中心点xかyどちらでも可+横か縦の長さ
>enn_Ar = tyuusinntennAx + (yoko/2)


円の半径は、「横か縦の長さの半分」だけです tyuusinntennAx は要りませんよ



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