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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0502
Myst敵の向きについて(その2)3解決


Myst

リンク

2006/5/2(Tue) 15:30:56|NO.558

以前、敵の向きについて質問しましたが、
http://hsp.tv/play/pforum.php?mode=all&num=484
次のスクリプトを実行しても敵がうまく自分の方向に向いてくれません。

#define Pi 3.14159 screen 0,320,320 buffer 2,16,32 : color 255 : mes "↑" gsel 0 xc=160.0 : yc=160.0 repeat redraw 0 color : boxf color 255 mx=mousex : my=mousey rad=atan(yc-mousey,xc-mousex)*180.0/Pi //角度を求める title ""+rad pos xc,yc : grotate 2,0,0,rad,16,32 redraw 1 await 20 loop
どうすれば敵が上手く自分の方向に向いてくれるのでしょうか?
よろしくお願いします。



この記事に返信する


K

リンク

2006/5/2(Tue) 16:35:16|NO.559


#define Pi 3.14159 #const Pih Pi/2 ;90度 screen 0,320,320 buffer 2,16,32 : color 255 : mes "↑" gsel 0 xc=160.0 : yc=160.0 repeat redraw 0 color : boxf color 255 mx=mousex : my=mousey rad=atan(yc-mousey,xc-mousex) ;角度単位ラジアン rotate=rad*180.0/Pi ;ラジアンを1週360の角度に変換 (表示用) title ""+rotate ; xc-=cos(rad) ;おまけ ; yc-=sin(rad) ;矢印の方に移動 pos xc,yc : grotate 2,0,0,rad-Pih,16,32 ;90度を引いて角度との見た目を合わせる(元の絵が横なら不要) redraw 1 await 20 loop

>次のスクリプトを実行しても敵がうまく自分の方向に向いてくれません。

どう、うまくないのか説明できるぐらい良く検証してみてください
そうすれば、今回の間違いも発見出来たでしょう。

grotateに渡す値が普通の角度になっているのが原因です。
表示用に変換してそのまま使ってしまいましたね(^^;



Drip

リンク

2006/5/2(Tue) 18:57:02|NO.573

Dripです。

 Myst さん、こんにちは。アークタンジェントを使用する方法を取られたようですね。
かなりいい線行ってるのでもう一息です。^^
grotateに使用する角度はラジアン値というものを使用しています。
指定に180とか、360とかいう数字は一切必要ありません。
とりあえず、Mystさんの作られたプログラムを一番簡単な修正で動くようにするには、


*180.0/Pi を -Pi/2 にします。

これだけで理想的な動作が実行されるはずです。 小学校でならう一周360度の角度と違い、ラジアン値で角度を指定する場合は0〜2πになります。 ディグリー(0〜360)の整数角度と、ラジアン値(0〜2π)の角度を 表示するサンプルを以下に示します。
	buffer 3,256,256
	font "MS ゴシック",128:color 255,240,240:pos 64,0:mes "↑":color
	font "MS ゴシック",16
	pos 56,100:mes "●":pos 180,100:mes "●"
	pos 46,140:mes "‥":pos 190,140:mes "‥"
	circle 104,100,136,160,0
	circle 120,100,152,160,0
	circle 104,101,136,161,0
	circle 120,101,152,161,0
	color 255,255,255:boxf 104,100,152,154
	screen 0,400,300
	repeat
		redraw 0
		color 255,255,255:boxf:color
		mytan=-atan(200-mousex,150-mousey)
		pos 200,150
		gmode 0,256,256
		grotate 3,0,0,mytan
		pos 10,10
		mes "ラジアン角度 :"+(mytan+3.141593)
		mes "ディグリー角度:"+(int(mytan*57.295646)+180)
		redraw 1
		await 15
	loop

このような三角関数を利用するプログラムが書けるようになると、
簡単な追尾ミサイルや距離の計算などができるようになります。
いろいろと研究してみてください。



Myst

リンク

2006/5/3(Wed) 10:24:37|NO.584

Kさん、Dripさんありがとうございます。
おかげさまで敵が自分の方向に向いてくれるようになりました。



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