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 Sub
https://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 Sub
Jotain 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 Function
Pitä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.