Moi =)
Olis tämmönen ongelma.
Teen tossa yhtä peliohjelmaa, jossa ruudun keskellä on ampuva örkki.
Örkiä olisi tarkoitus suunnata siis hiiren suuntaan
Örkkin kuvakulmaa muutan Rotatella.
Onko kellään valmista laskukaavaa, jolla saisi laskettua kulman X- ja Y-koordinaateista?
Jotenkin näin...
Private Sub P1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim X1 As Single, Y1 As Single
If Not GameOver Then
With Sammakko
If Button = 1 Then
X1 = Abs(.Pos.X - X)
Y1 = Abs(.Pos.Y - Y)
.Ang = (Tan((Sin(X1) + Cos(Y1)))) * pi
' Vai miten se meni? yrittää liikkua jo!!
End If
End With
End If
End Subhttps://www.ohjelmointiputka.net/koodivinkit/
Auttaisiko tuo sinua? Pienellä muuntamisella pitäisi toimia.
Auttoihan se.. tosin kulma 'pomppasee'.
Private Sub P1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim X1 As Single, Y1 As Single, a As Double, b As Double
If Not GameOver Then
With Sammakko
If Button = 1 Then
'aloitetaan kaikki kulman laskemiseen liittyvät asiat
a = .Pos.X - X
b = .Pos.Y - Y
If a = 0 Or b = 0 Then
.Ang = 0
Else
.Ang = -Atn(a / b) / (pi / 180) 'lasketaan kulma...
End If
End If
End With
End If
End SubJotain kummaa tossa vielä on... ei meinaa muuttaa tuota lista-asua VB
Mod. korjasi kooditagit, niissä on tosiaan vain hakasulkeita [], ei aaltosulkeita {}.
Käytä Atan2-funktiota, http://en.wikipedia.org/wiki/Atan2
http://en.wikibooks.org/wiki/Programming:
Public Const Pi As Double = 3.14159265358979
Public Function Atan2(ByVal y As Double, ByVal x As Double) As Double
If y > 0 Then
If x >= y Then
Atan2 = Atn(y / x)
ElseIf x <= -y Then
Atan2 = Atn(y / x) + Pi
Else
Atan2 = Pi / 2 - Atn(x / y)
End If
Else
If x >= -y Then
Atan2 = Atn(y / x)
ElseIf x <= y Then
Atan2 = Atn(y / x) - Pi
Else
Atan2 = -Atn(x / y) - Pi / 2
End If
End If
End FunctionPitäiskö tuon atan2-funktion laskea suoraan oikein toi kulma?
en ainakaan saanut sillä mitään kunnollisia arvoja aikaan.
Osaisiko Antti antaa tähän jotain valaisua, kun olet funktio guru? =)
Onko 0 astetta kun x ja y on samassa arvossa?
pyöritettävä kuva on 0 asteessa normisti ylösalaisin kuva osoittaen suoraan ylös.
Käytän pyörittämiseen FoxRotate-funktiota, joka pyörittää kuvaa keskiakselin ympäri, toisin kuin putkassa ollut esimerkki, jolle syötetään kuvan origo.
Ongelma onkin siinä, että millä arvolla kerron ton atan2-asteen, että saan 0-360 asteen arvon?
ja missä asennossa kuvan pitäisi silloin olla...
Aihe on jo aika vanha, joten et voi enää vastata siihen.