Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Rotate ongelma

Sivun loppuun

Kasp3r [01.06.2010 15:33:56]

#

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

Metabolix [01.06.2010 15:39:46]

#

Luo jälkimmäisessä funktiossa uusi Graphics-objekti metodilla g.create() ja käytä pyöritykseen ja piirtoon sitä.

Kasp3r [01.06.2010 16:59:40]

#

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ää?

Metabolix [02.06.2010 08:58:06]

#

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.

Kasp3r [02.06.2010 10:26:07]

#

Siis tuo backg piirtää kuvan kaksoispuskurointia käyttäyen.

Metabolix [02.06.2010 11:12:13]

#

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.

Kasp3r [02.06.2010 11:20:42]

#

No voisitko hieman valaista miten itse tämän ratkaisisit, olen nyt jo ihan sekaisin?

Metabolix [02.06.2010 11:24:11]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta