Hei, olen nyt opettelamssa javaa ja olen tullut pienen ongelman eteen, jota olen pari päivää pohtinut, mutta en ole keksinyt/löytänyt ratkaisua.
Eli pelaajan hahmon ase pitäisi osoittaa hiiren näyttämään suuntaan ja olen laskenut hiiren ja aseen välisen kulman tangentilla ja ajattelin käyttää rotate(); metodia?.
Mutta ongelmana on, että kaikki grafiikat kääntyvät x astetta, kun käytän tätä rotate hommelia.
Miten saan vain tietyn kuvan kääntymään?
public void update( Graphics g ) { backg.drawImage( bgimg, 0, 0, this ); backg.drawImage( hp, 0,0, this); backg.setColor( Color.white ); backg.drawImage( player, x2, y2, this ); backg.drawString("Gas left:" +kaasu, 400,10); backg.drawString("Kulma Deg: "+Math.atan(kulma) * 180/Math.PI , 200,25); backg.drawString("Score:" +score, 300,10); backg.drawString("Health: 100", 34,10); backg.drawString("Mouse at:" +mx, 475,10); backg.drawString(","+my, 550,10); lol(g); g.drawImage( backbuffer, 0, 0, this ); } . . . public void lol( Graphics g ) { Graphics2D g2d=(Graphics2D)g; if (mx>x2) g2d.rotate(kulma *-1); else g2d.rotate(kulma); backg.drawImage( ase,x2, y2 +4, this ); repaint(); }
Kiitos jo valmiiksi kaikesta tulevasta avusta :).
Luo jälkimmäisessä funktiossa uusi Graphics-objekti metodilla g.create() ja käytä pyöritykseen ja piirtoon sitä.
Haluaisitko nyt ihan rautalangasta vääntää tämän.
lisäsin: g2d = (Graphics2D) g.create(); oikein?
Mutta tämän jälkeen mikään ei enää pyörinyt.
Mahtaisiko johtua, että kuvan piirtoon käytän backg. double bufferointia?
Vai miten tuota g.create() tulisi käytää?
Kuten sanoin, käytä myös piirtämiseen kyseistä objektia. Nyt käytät (virheellisesti) jotain backg-nimistä, mikä tämä edes on? Alusta asti pitäisi käyttää annettua grafiikkaobjektia, tai sitten pitäisi tuollekin lol-funktiolle välittää vain oikea objekti.
Siis tuo backg piirtää kuvan kaksoispuskurointia käyttäyen.
Aivan, mutta ei sinun silloin kuulu koskeakaan parametrina annettuun Graphics-olioon vaan käyttää vain takapuskuriin liittyviä olioita. Ainoa rivi, jolla g saa esiintyä, on tuo, jolla takapuskuri piirretään ruudulle.
No voisitko hieman valaista miten itse tämän ratkaisisit, olen nyt jo ihan sekaisin?
Näin:
public void update(Graphics g) { piirra(); g.drawImage(backbuffer, 0, 0, this); }
Tämän jälkeen voit toteuttaa piirra-funktion mielesi mukaan, etkä voi enää vahingossakaan käyttää väärää oliota. Kaikki piirtäminen tapahtuu siis backg-olion tai siitä create-metodilla luotujen olioiden kautta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.