Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6 Olio aina kursoriin päin

JoreSoft [07.10.2008 15:30:55]

#

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

nomic [07.10.2008 15:32:09]

#

https://www.ohjelmointiputka.net/koodivinkit/23623-qb-kulman-laskeminen

Auttaisiko tuo sinua? Pienellä muuntamisella pitäisi toimia.

JoreSoft [07.10.2008 16:06:56]

#

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 {}.

Metabolix [07.10.2008 17:32:44]

#

Käytä Atan2-funktiota, http://en.wikipedia.org/wiki/Atan2

http://en.wikibooks.org/wiki/Programming:Visual_Basic_Classic/Simple_Arithmetic

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

JoreSoft [07.10.2008 20:01:11]

#

Pitäiskö tuon atan2-funktion laskea suoraan oikein toi kulma?
en ainakaan saanut sillä mitään kunnollisia arvoja aikaan.

JoreSoft [12.10.2008 21:04:26]

#

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...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta