Closed aXu-AP closed 12 years ago
Otsikkosi on vallan loistava, siitä tulee heti ilmi tämän bugin ydin. On täällä pidempiäkin ollut.
Tuo bugi johtunee siitä että näytönohjain käyttää liukulukuja piirrettäessä. Allegron manuaalissa on aiheesta mainittu. Pitää vielä katsoa myöhemmin että bugaako cbE itsessään jotenkin jännästi.
Eikun kas tuohan on ihan eri asia. Pitää tarkistaa miksi tuo bugaa.
Nyt taas kysymys, tarviiko liukulukuja käyttää missään piirtämiseen liittyvässä niin kauan kun se Smooth2D on pois päältä?
Kaikki laskenta ja piirtäminen tapahtuu cbE:n puolella liukuluvuill,a mutta ei sinun ole pakko käyttää niitä koodissasi.
Niin no se oli lähinnä retorinen kysymys, mitäänhän ei sinne pikseleiden välille voi piirtää (liukulukukoordinaatteja on vain hieman hankala välttää objekteilla)
Tämä ongelma johtuu jotenkin joko Allegrosta tai sitten siitä että näytönohjaimesi ei toimi kunnolla kun piirtokoordinaatti on kahden pikselin välissä. Itselläni esimerkkisi toimii ihan nätisti, mutta tatti.bmp piirtäminen kyllä jotenkin jännästi bugailee: http://vesq.viuhka.fi/cbe/scrshots/tattibmp_bug.png
Suljen tämän bugiraportin koska tämä ei luultavasti johdu cbE:stä.
Katsos, sinullahan on sama ongelma, mutta vaakasuunnassa :D Onhan tämä suht. helppo välttää (mutta toisten tekemissä peleissä tämä tulee minua kyllä häiritsemään).
Hmh, voisi koittaa laittaa jotain liukulukukorjauksia piirtelyihin, jos saisi tuon korjattua. Saattaa kyllä olla ettei voi tehdä asialle mitään, jos Allegro kusaisee kuvan jo lataamisen yhteydessä.
Ei se sitä kaiketi kuvan lataamisen yhteydessä tuollaiseksi tee, veikkaan että siirtämällä 0.5 pikseliä sivusuunnassa sinulla näkyy normaalisti. Mietityttää vain, miten korjata ongelma joka ilmenee erilailla eri koneilla. Pitäisi varmaan vähän kartoittaa, kuinka yleinen tämä on. Muokkaanpa tuota aloitusviestin koodia lisäämällä sivuttaissuunnassa liikkumisen, niin on helpompi testailla muidenkin.
EDIT: Yksinkertaisin tapahan päästä tästä eroon on jättää kuvaan tyhjä pikselirivi joka laidalle (tämän takia esimerkkikuvaksi otin tatti.bmp:n, koska melkein kaikissa muissa cb-mediassa on tyhjää reunoilla). Pystyisikö sen tyhjän rivin lisäämään vielä cbe:n sisäisesti? Olisi kyllä aika tylsä tapa kiertää ongelma, ja vaatisi tod. näk. ainakin kuvan koon kertovien funktioiden muokkaamista.
Tämä näyttäisi olevan bugi allegrossa, luultavasti jonkinlainen pyöristysvirhe kuvan piirron yhteydessä. Pitää koittaa väsätä allegrolle jonkinlainen bugiraportti.
Täytyy kyllä muutella aikas montaa funktiota kun tämän korjaa :/ vähän harmi. Mutta kyllä se varmaan cbE:hen sisäisesti toteutetaan.
Testasin vielä ja huomasin, että sama ongelma tulee kuvillakin.
ukko = LoadImage("media/tatti.bmp")
ClsColor 255, 255, 255
x# = 200
y# = 150
Repeat
Color 0, 0, 0
Text 0, 0, "x: " + x
Text 0, 12, "y: " + y
Text 20, 24, "The mushroom above is buggy, the one below"
Text 20, 36,"is set to always draw at integer coordinates."
x# = x + 0.5 * (KeyHit(cbKeyRight) - KeyHit(cbKeyLeft))
y# = y + 0.5 * (KeyHit(cbKeyDown) - KeyHit(cbKeyUp))
DrawImage ukko, x, y
DrawImage ukko, Int(x + 0.5), y + 20
DrawScreen
Forever
Niin ja ettet ihan nyt taas ala ehdottelemaan että korjattais, kun ei oo Smooth2D päällä, niin tässä esimerkkiä mitä tapahtuu Smooth2D:n ollessa päällä.
Smooth2D ON
ukko = LoadImage("media/tatti.bmp")
ClsColor 255, 255, 255
x# = 200
y# = 150
Repeat
Color 0, 0, 0
Text 0, 0, "x: " + x
Text 0, 12, "y: " + y
Text 20, 24, "The mushroom above is buggy, the one below"
Text 20, 36,"is set to always draw at integer coordinates."
x# = x + 0.5 * (KeyHit(cbKeyRight) - KeyHit(cbKeyLeft))
y# = y + 0.5 * (KeyHit(cbKeyDown) - KeyHit(cbKeyUp))
DrawImage ukko, x, y
DrawImage ukko, Int(x + 0.5), Int(y + 20.5)
DrawScreen
Forever
Korjasin tämän nyt niin, että se toimii vain Smooth2D:n ollessa päällä. Jos ohjelmoija kenties haluaa käyttää Smooth2D:tä, niin kannattaa käyttää kuvia joissa laidoilla on tilaa pehmennykselle.
Meh. Ei edelleenkään toimi tämä korjaus objekteilla :/ kuvilla jotka piirrettiin näyttökoordinaatteihin niin toimi. Pitänee tehdä objekteille uusi issue kun tämä on jo korjattu kuville.
Anteeksi hieman pitkä otsikko, en keksinyt kuvaavampaa. Eli objekteilla ja kuvilla piirto bugaa jännästi, kun y-koordinaatti on kahden pikselin välissä (eli x.5 liukuluvun tarkkuuden rajoissa). Ylin pikselirivi näkyy kahteen kertaan ja alin puuttuu kokonaan. Tässä näkyy bugi toiminnassa (liiku nuolilla):
Tämä bugi on ollut oikeastaan jo ihan ensimmäisestä versiosta lähtien, mutta vasta nyt löysin tavan tuottaa bugi 100% varmuudella.