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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0127
YuSTGの敵の動きについて技術的なアドバイスをお願いします。9解決


Yu

リンク

2007/1/27(Sat) 00:01:22|NO.5206

はじめまして。
僕は今縦シューティングを作成しています。
とても簡素ながら大まかなシューティングの要素は抑え、
残すところは敵のバリエーションや動きの考察、敵を配置しステージを構成するのみとなりました。
まぁここからが本当のヤマ場かもしれませんが・・・

前置きはこの辺にして、今回投稿させて頂いた理由はタイトルにもあるように、敵の動きについてです。
敵が現れたら自機の方向を向く様にしたいのですが、良い方法が思いつきません。
一つ二つ考えたのですが、角度やラジアンとか言うのがちんぷんかんぷんで、どうもうまくいきません。
皆様、良いアドバイスをお願いします。
出来れば下のソースを、画像の頭が赤い●を常に遅れて向くように書き改めて頂ければ、至極幸です。


buffer 3
picload dir_exe+"/sample/game/face.bmp" ; 画像ファイル
screen 0,640,480

x1=0 : y1=0 ; 左上XY
x2=640 : y2=480 ; 右下XY

mx=320.0 ; X座標
my=240.0 ; Y座標
msp=4.0 ; スピード
mr=0.0 ; 角度
mrsp=0.1 ; 角度回転スピード
zix=310
ziy=320
*main
redraw 0 ; 描画始め

color 0,0,64
boxf ; 背景を消す

gmode 2,64,64 ; 画像サイズ
pos mx,my
grotate 3,0,0,mr ; 画像コピー
color 255,0,0
pos zix,ziy
mes "●"

redraw 1 ; 描画終わり
await 20
stick key,15


if key&1 : zix-5 //
if key&4 : zix+5 // 赤い丸を動かす
if key&2 : ziy-5 //
if key&8 : ziy+5 //
//
//
//
//加筆するのはこの辺りでしょうか?
//
//
//

;if key&1 : mr-=mrsp // 一応保留
;if key&4 : mr+=mrsp //
;if key&2 : mgo=msp : goto *main2 //
;if key&8 : mgo=-msp : goto *main2 //

goto *main
*main2 ; 直進
rot=mr-1.57079632
mx=limitf( mx+cos(rot)*mgo, x1, x2 )
my=limitf( my+sin(rot)*mgo, y1, y2 )

goto *main


完全HSP付属のサンプルからのパクリで、相違点も多くは無いのですが・・・



この記事に返信する


As

リンク

2007/1/27(Sat) 00:48:25|NO.5208

HSP開発Wikiには敵をある方向に追いかけさせるためのモジュールが幾つか公開されてますよ。

目的の点を追いかける
http://hspwiki.nm.land.to/?cmd=read&page=%BE%AE%A5%EF%A5%B6%2F%B2%E8%C1%FC%BD%E8%CD%FD%2F%CC%DC%C5%AA%A4%CE%C5%C0%A4%F2%C4%C9%A4%A4%A4%AB%A4%B1%A4%EB&word=Forrow

敵がマウスを追跡する
http://hspwiki.nm.land.to/?%C5%A8%A4%AC%A5%DE%A5%A6%A5%B9%A4%F2%C4%C9%C0%D7%A4%B9%A4%EB

追跡騨
http://hspwiki.nm.land.to/?%C4%C9%C0%D7%C2%CD





追跡騨が一番すばらしいかもしれません。



kz3

リンク

2007/1/27(Sat) 17:21:44|NO.5218

>Yuさん
質問するだけでいっぱいいっぱいなのかも知れませんが、投稿した後も自分の投稿は見直してください。
スクリプトの投稿するときの三ヶ条(削除用パスワードの左側の 1, 2, 3 です)の特に3番目を実施してください。

余談:
三ヶ条の3番目の書き方って「HTMLなどの書き方を知ってる人なら分かるだろう」というのが前提にあるような気がします。
「囲う」ではなく、囲った状態のものを見せたほうが手っ取り早い気がしますが、ほとんどの場合、やっぱり質問するので頭がいっぱいだとか、面倒だとかなのでしょうか...。
閉じ忘れて失敗することもありますが、私はその都度、本文コピー -> 投稿削除 -> コピーしたものを修正して再投稿、というようにやってます。



Yu

リンク

2007/1/27(Sat) 19:38:03|NO.5222

kz3さんすいません。
急いでたのか寝ぼけてたのか分かりませんが、見落としていました。
今度から心がけたいと思います。
Asさん、違うのです・・・
今回は、誘導弾とか自機を追尾するとかではないのです。
読み辛くてすみません・・・
探すのが下手なだけかもしれませんが、自分が探した中では、
ネット上でこの質問に対する答えは見つかりませんでした。
確か、この掲示板のログにもそれに類するようなものはありませんでした。
もしかするとこの質問の内容は、説明するほどでも無い、とても初歩的な事だったりするのでしょうか・・・
まぁそれは良いとして、今度は詳しく分かりやすいように例で説明します。

▼の形をした敵機がいたとし、下を向いてる頂点が弾を発射する銃口だとします。
●の形をした自機が敵機▼の右下45度にいたとします。
敵機▼は弾を自機●に当てるため、随時自機●の方向を向いていなければなりません!
その敵機▼が、自機●の方向を向いているにはどうすれば良いのかが分からないのです。
どうか、何か直接的なヒントをお願いします。



radeon

リンク

2007/1/27(Sat) 20:49:25|NO.5224

ematanという命令を使えばできます。
でも古いパソコンだと動作が重くなるかも。



As

リンク

2007/1/27(Sat) 22:23:49|NO.5227

mes "●"

の前に

mr=atan(ziy-my,zix-mx)+2

を追加してみてください。



As

リンク

2007/1/27(Sat) 22:26:24|NO.5228

補足ですが、Googleで検索するとき、


"*の方向を*かせる"

という風に検索すると、「*」のところがなんでもいい文字列でもマッチするように
なります。



Yu

リンク

2007/1/28(Sun) 01:07:44|NO.5241

おぉ 皆さんありがとうございます。
とても参考になります。
Asさんの方法で、遅らせて●の方向を向かせたいと思った自分は、mes "●"の下の部分を
	mr2=atan(ziy-my,zix-mx)+2
if mr<mr2 : mr+mrsp if mr>mr2 : mr-mrsp
としてみたのですが、一回転したところで数が変わってしまうので、うまくいきません。
どのようにすれば、滑らかについていくのか、これもまたお願いします・・・



As

リンク

2007/1/28(Sun) 02:05:00|NO.5244

*main の前に

ex=zix-mx ey=ziy-my

mes "●"

redraw 1

の間に


mes "●" title ""+(ex)+" "+(ey) if (ex>zix-mx+2)|(ex<zix-mx){ if ex<zix-mx{ ex+2 }else{ ex-2 } } if (ey>ziy-my+2)|(ey<ziy-my){ if ey<ziy-my{ ey+2 }else{ ey-2 } } mr=atan(ey,ex)+2



Yu

リンク

2007/1/28(Sun) 22:34:02|NO.5277

なるほどぉ Asさん、ありがとうございます。
問題は解決しました。
他にも色々と参考になりました。
質問にお答え頂いた皆様、どうもありがとうございました。
またわからない事等がありましたら、ちょくちょくここを利用したいと思うので、これからもよろしくお願します。



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