Closed aXu-AP closed 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
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?
Ahaa. Ne muuttujat olikin jäännyt alustamatta. Korjattu.
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).