cb-hackers / cbEnchanted

A new runtime for CoolBasic
13 stars 3 forks source link

MouseMoveX, -Y ja -Z bugaa ohjelman alussa #78

Closed aXu-AP closed 12 years ago

aXu-AP commented 12 years ago

Ensimmäisellä kerralla kun mitä tahansa MouseMove-funktioista kutsutaan, tuloksena on satunnaiselta tuntuva suuri luku. Kun hiiri tuodaan ensimmäistä kertaa ruutuun (tai rullataan silloin kun ikkuna on aktiivisena), tulee sama luku negatiivisena (saattaa heittää MouseMoven varsinaisen arvon verran).

Repeat
    m = MouseMoveX()
    If m <> 0 Then Print "MouseMoveX: " + m
    m = MouseMoveY()
    If m <> 0 Then Print "MouseMoveY: " + m
    m = MouseMoveZ()
    If m <> 0 Then Print "MouseMoveZ: " + m
    DrawScreen
Forever
kukkamario commented 12 years ago

Tämä johtuu siitä, että arvoja verrataan edellisiin arvoihin. Ohjelman alussa "edelliset arvot" ovat 0, joten ensimmäisen MouseMove*:n kutsun palautusarvo saattaa olla todella suuri. Tämä sama bugi/ominaisuus on havaittavissa CB:lläkin.

MouseMoveX on toiminnaltaan käytännössä tällainen:

Global lastMouseX
Function MouseMoveX()
    mx = MouseX() - lastMouseX
    lastMouseX = MouseX()
    return mx
EndFunction
aXu-AP commented 12 years ago

Samaa ongelmaa ei kyllä cb:llä tule. Tietenkin joka kerta ikkunaan vietäessä hiiren sijaintia verrataan siihen mistä hiiri viimeksi lähti pois/ikkunan vasempaan yläreunaan ensimmäisellä kerralla, mutta silloin arvot ovat ihan järkevissä rajoissa (ja MouseMoveZ:lla ei tuota ongelmaa tule ollenkaan). Nämä cbe:n tuottamat luvut ovat todella suuria (>1 000 000 000), ja ilmestyvät vain ensimmäisellä kerralla kun funktioita kutsutaan/hiiri viedään ikkunaan eikä olemattoman edellisen arvon vertaaminen selitä kuitenkaan niitä jälkimmäisiä, negatiivisia lukuja.

EDIT: Eikus joo tuostahan se johtuu, vika on varsinaisesti MouseX, MouseY ja MouseZ-funktioissa, niiden arvot ovat jotain ihmeellistä ennen kuin hiiri tuodaan ikkunaan. Eli korjaus lienee helppo, pistää Mouse* funktiot palauttamaan nollaa kunnes hiiri tuodaan ikkunaan?

kukkamario commented 12 years ago

Ahaa. Ne muuttujat olikin jäännyt alustamatta. Korjattu.