『スクリプト 汎用関数』 自機狙い弾

投稿者:Cdv30200 aoi icon mini aoihikawa 投稿日:2011/07/31 13:53

自機狙い弾
(ご自由にご利用ください)

------------------------------

敵機から自機に向けて発射される弾の
X/Y方向の弾速を算出します。

自機と敵機を入れ替えることで
自機から指定ポイントへ発射する弾にも
応用可能です。

------------------------------

引数 自機X/Y座標・敵機X/Y座標・弾速
戻り値 X/Y方向の弾速

def jikinerai_tama(char_x, char_y, ememy_x, ememy_y, speed)
    r = 0; x = 0; y = 0
    if char_x == ememy_x
        if char_y > ememy_y
            y = (speed * (-1))
        elsif char_y < ememy_y
            y = speed
        end
    else
        r = (atan2((ememy_y - char_y), (ememy_x - char_x)))
        x = floor(cos(r) * speed)
        y = floor(sin(r) * speed)
    end
    ret_data = createArray()
    ret_data[0] = x
    ret_data[1] = y
    return ret_data
end


使用例
#自機の座標
char_x = 150
char_y = 250

#敵機の座標
ememy_x = 450
ememy_y = 350

#弾速
speed = 20

#X/Y方向の弾速の算出
ret_data = jikinerai_tama(char_x, char_y, ememy_x, ememy_y, speed)

#戻り値の展開
speed_x = ret_data[0]
speed_y = ret_data[1]

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Cdv30200 aoi icon mini aoihikawa(投稿日:2011/08/01 10:17, 履歴)
>ikosamiさま

始めからありましたよ(w
うっかりか、気のせいかも(w
Material 7186 1 mini ikosami(投稿日:2011/07/31 23:28, 履歴)
ほぼ、どこでも大丈夫ですよ。

あれ?
r = atan2((ememy_y - char_y), (ememy_x-char_x))

が、さっきは無かったような気がするのですが、
無いと動かないとから考えると、あったはずですよね・・・???

気のせいですかね(^^;)
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/07/31 22:54, 履歴)
>ikosamiさま

なるほど。
算出した角度も
戻り値に追加してあげるわけですね。

1つ目の挿入箇所は
        y = floor(sin(r) * speed) 
    end 
     
#この位置

    ret_data = createArray()

でしょうか。
Material 7186 1 mini ikosami(投稿日:2011/07/31 22:44, 履歴)
y = 0
のあとに
  r = atan2((ememy_y - char_y), (ememy_x-char_x))

最後に
ret_data[2] = r

を追加すれば、
ミサイルとかの狙い弾の角度も算出できますね(^^)