三角関数を使ってシューティングゲームの誘導弾をつくろうとしたのですが、
形としては
「敵が前方から向かってきて自機に向かって弾を撃ち、
その打った弾が誘導弾となって自機に向かってくる。」
と言う感じです。
そこで、
ソースの一部なのですが、
三角関数にする上で改良した点が、
①フォームロードに
Dim sita As Double '角度変数θ
Dim sita2 As Double
Dim sita3 As Double
を追加
②敵の弾の表示のサブジェクトをこのように改良
Private Sub Teki4tama() '敵の玉(強い敵)
If Kaunnto = 2 Then
BitBlt Form1.hDC, TogetogeX(b) - 16, TogetogeY - 16, 32, 32, Picture16.hDC, 0, 0, vbSrcAnd
BitBlt Form1.hDC, TogetogeX(b) - 16, TogetogeY - 16, 32, 32, Picture15.hDC, 0, 0, vbSrcPaint
If TogetogeY > 1100 Then TogetogeY = 1101
If TogetogeX(0) > 2000 Then TogetogeX(0) = 2001
If TogetogeX(2) < -2000 Then TogetogeX(2) = -2001
Select Case b
Case 0
TogetogeY = TogetogeY + Sin(sita) '3
TogetogeX(0) = TogetogeX(0) + Cos(sita) '7
Case 1
TogetogeY = TogetogeY + Sin(sita2) '3
Case 2
TogetogeY = TogetogeY + Sin(sita3) '3
TogetogeX(2) = TogetogeX(2) + Cos(sita3) '- 7
End Select
End If
End Sub
③タイマーにこのような命令を入れる
'左
If key(2) = True And 0 < sita < 180 Then sita = sita - 2
If key(3) = True And 0 < sita < 180 Then sita = sita + 2
If key(2) = True And 0 < sita2 < 180 Then sita2 = sita2 - 2
If key(3) = True And 0 < sita2 < 180 Then sita2 = sita2 + 2
If key(2) = True And 0 < sita3 < 18
ちなみにkey(2)は左 key(3)は右が押されているか否かのboolean変数です
そしてこれを実行すると、始めは全ての弾が上に行き、(自機と逆方向)
その後小刻みに震えながら横に動いたりと分けがわからず。。。
これで正しいと思いつつ結果は全くおもいどうりになりません。
どなたかご教授いただけないでしょうか。
すみません、
①フォームロードに
Dim sita As Double '角度変数θ
Dim sita2 As Double
Dim sita3 As Double
を追加
ではなく、
Option Explicitの前でした
それと、フォームロードに
sita=135
sita2=90
sita3=45
と追加したことを書き忘れました。
これを踏まえてご教授お願いします
ラジアンと度の違いを理解していますか?
書きかけで送ってしまったのでその続き。
VBの三角関数のヘルプをもう一度最後までよく読み直しましょう。
そこに全ての答えが書いてありますから。
ツイート | ![]() |