[java]shape draaien zonder andere mee te bewegen

Pagina: 1
Acties:

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
Voor een java progje wat ik aan het schrijven ben, wil ik een zo simpel mogelijke grafische weergave van een wagentje in 2D laten zien.

Dat wagentje moet daar dan rondrijden en zijn omgeving in kaart brengen. Op zich geen probleem, maar voor het zich bewegen in de wereld, moet het kunnen draaien. Om een (zijn eigen) as. Hiervoor gebruik ik Graphics2D.rotate(hoek/180*PI, XlokatieAs, YlokatieAs); Dit heeft het voordeel dat de hele grafische interface 'meedraait' zodat een opdracht om 'naar voren' te rijden voor het wagentje eigenlijk de richting uit gaat die ik wil.

Het heeft echter ook een nadeel: zodra ik nog iets bij het wagentje in het veld teken (een 'muur') draait deze ook mee met het wagentje. Dat moet natuurlijk niet!

/* Nou ben ik al wat in de documentatie gaan snuffelen op
zoek naar een functie die aan de rotate methode een 'draaistraal' wordt meegegeven of waarbij je dit truukje voor maar een shape (of image) kan toepassen.

Zo'n methode lijkt echter niet te bestaan en dit is bij nader inzien misschien wel zo logisch, omdat je dan geen consequente grafische omgeving meer hebt.
*/

Nou dacht ik voor zoiets aan een soort layer idee, waarbij het wagentje rondrijdt op zn eigen layertje, maar de omgeving vastzit op een andere. Hiervoor zou ik echter een nieuwe grafische omgeving (panel, canvas, etc) moeten gebruiken. Ik krijg deze alleen zo niet 'doorschijnend' dat de ene panel de andere laat zien.

Ik hoop hiermee iets van een duw in de goede richting te krijgen of dit de manier is om dit aan te pakken..

NB vreemde eigenschap search.. doe eens een search op 'draaien'.

Localhost is where the heart is


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21:50
Je kunt bij Images wel Graphics-objecten aanvragen. Met een transparante Image zou 't dus moeten lukken.

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
en dan op de image tekenen? klinkt wat omslachtig, maar zou wel moeten werken.. probeer ik morgenochtend!

Localhost is where the heart is


Verwijderd

Op donderdag 23 mei 2002 23:42 schreef SilentStorm het volgende:
Ik krijg deze alleen zo niet 'doorschijnend' dat de ene panel de andere laat zien.
Volgens mij wil dat doorschijnende wel met een JLabel

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
Vanochtend weer mee bezig geweest. Eerste mogelijkheid werkt niet, want een image moet je ook weer ergens op tekenen en ik heb tot nu toe nog geen transparant component gevonden.

Jlabel - Ik maak geen swing ding, maar werk gewoon met awt componenten op een frame. Ik heb daar nog geen mogelijkheid gevonden om een Jlabel of soortgelijk op kwijt te kunnen.

Panel, Canvas, etc - tot nu toe nog geen transparante functie kunnen vinden. Bij panel staat echter wel een 'isOpaque()'. Het is er dus wel mee mogelijk.. Maar er is geen functie voor :?

Localhost is where the heart is


  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
--toch een Jpanel aan de praat gekregen. Kon eigenlijk gewoon op normale manier geimplementeerd worden. Klopt nog niet helemaal, maar ik kom er wel uit..

Localhost is where the heart is


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21:50
Misschien kun je nog een korte code snippet plaatsen, als je denkt dat het werkt? Het lijkt allemaal vrij lastig te zijn, dus ik neem aan dat iemand daar wel wat aan kan hebben.

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
Ik zit er nog steeds mee te prutsen. Ik geloof dat het aan mijn paint methode ligt, maar het wagentje komt niet van zn plaats af. Toen het dat nog wel wilde (zonet) kreeg ik het JPane (nog) niet voor het panel. Transparant is leuk, maar dan moet ie wel vooraan staan. Een toFront() bestaat ook al niet geloof ik.. Computers hier draaien extreem traag.. Helemaal gaar hier..

Opmerking over richting wagentje automatisch al een bepaalde kant op laten gaan klopte ook niet, ik miste net een functie die daar al door een collega was gemaakt om het karretje de juiste richting te geven.

Ik denk er nu over om het dan toch maar met 1 grafische context te doen, waarbij ik eerst het wagentje erin zet, het draai en dan de rest toevoeg in een andere teken procedure.. als dat werkt.. ik post het eindresultaat nog voor de uitwerking..

Verhaal wordt er ook niet duidelijker op zo :(

Localhost is where the heart is


  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45
voor de geinteresseerden hier nog het beloofde stukje code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Constructor:
{ [..]
    simBackGround = new SimBackGround(); //aanmaken voor bouwen buggy,
// zodat je deze eraan mee kan geven
    bSimBuggy(); //zet buggy op scherm
    bSimBackGround(); //zet achtergrond erbij
  [..]
}

void bSimBackGround()
  { simBackGround.setBounds(50,50,500,500); //plaats op Frame
    simBackGround.setDoubleBuffered(true); //geen geflikker in het opbouwen
    add(simBackGround); //toevoegen aan Frame
  }
    
  void bSimBuggy()
  { simbuggy = new Simbuggy(simBackGround, buf, 250,250,0);     //JPanel.
// meegegeven buffer is dataReceiveBuffer, waarmee oa lokatie wordt bepaald
    simbuggy.setBounds(50,50,500,500); //plaats op Frame
    simbuggy.setOpaque(false); //doorzichtig
    simbuggy.setDoubleBuffered(true); //geen geflikker in het opbouwen
    add(simbuggy); //toevoegen aan Frame
  }

paint van SimBuggy:
code:
1
2
3
4
  public void paint(Graphics g)
  { BuggyGeval buggy = new BuggyGeval(g, degree,x,y);
    sbg.teken(x,y,buf);
  }

waarbij de teken() van SimBackGround alles doet voor het tekenen van de omgeving.

Nou zoek ik alleen nog maar een manier om repaint() te omzeilen zodat ik niet een heel buffer vol pixels hoef bij te houden voor het tekenen. (elke keer als ie zich repaint maakt ie anders het scherm weer leeg op de pixel(s) die ik dan neerzet na..

Localhost is where the heart is

Pagina: 1