Ik ben bezig wat java te leren adhv. het boek 'Programmeren in Java 2' (uitgeverij Academic Service).
Dit boek is wel al enkele jaartjes oud, waardoor enkele methodes waarschijnlijk ondertussen al vervangen zullen zijn door nieuwere.
Nu ben ik bezig met een spelletje waarbij een object weggeworpen kan worden.
Op zich werkte dit allemaal prima, tot ik een achtergrondafbeelding wou gebruiken en dubbele buffering om het flikkeren tegen te gaan.
Het programmaatje (applet) werkt als volgt:
Main.java maakt een instantie van de klasse Spel.
Main.java toont Spel.
Spel.java is een klasse die de klasse Panel extendt.
In de klasse spel gebeurt alles wat te maken heeft met het spel zelf.
Wanneer ik echter een nieuw Graphics object maak en vervolgens Getgraphics() aanroep, dan loopt het mis. Mijn programma compilet perfect, maar mijn panel wordt niet getoond en de console geeft een NullPointerException naar de regel(22) die getgraphics aanroept...
Spel.java
De code is nu nog een beetje wanordelijk, maar ik heb al een aantal dingen van volgorde en dergelijke zitten wijzigen om te testen of het dan wel werkte!
Weet iemand wat dit zou kunnen veroorzaken (ben ik ergens iets vergeten?), want ik heb wat zitten googlen en bijna alle sites gebruiken volgens mij dezelfde techniek voor dubbele buffering (swing uitgezonderd).
Dit boek is wel al enkele jaartjes oud, waardoor enkele methodes waarschijnlijk ondertussen al vervangen zullen zijn door nieuwere.
Nu ben ik bezig met een spelletje waarbij een object weggeworpen kan worden.
Op zich werkte dit allemaal prima, tot ik een achtergrondafbeelding wou gebruiken en dubbele buffering om het flikkeren tegen te gaan.
Het programmaatje (applet) werkt als volgt:
Main.java maakt een instantie van de klasse Spel.
Main.java toont Spel.
Spel.java is een klasse die de klasse Panel extendt.
In de klasse spel gebeurt alles wat te maken heeft met het spel zelf.
Wanneer ik echter een nieuw Graphics object maak en vervolgens Getgraphics() aanroep, dan loopt het mis. Mijn programma compilet perfect, maar mijn panel wordt niet getoond en de console geeft een NullPointerException naar de regel(22) die getgraphics aanroept...
Spel.java
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| public class Spel extends Frame implements Runnable{ Thread spel; int[][] punt = new int[1][2]; static double afstand = 0; static Graphics2D s; static double tijd=-1d; static Image krijtje; static Image klas; static Tijd speltijd; static double snelheid = 10; static int tijdspel = 120; // Tijd die het spel mag duren static double grkrijt = 50; // de grootte van het krijtje static double afstleerkr = 10; // de afstand waarop de leerkrachten zich bevinden static int score = 0; // houdt de score bij static boolean alpunten=false; //houdt bij of dit krijtje al iets heeft geraakt! Image offscreenImage; Graphics offscreenImageG; Dimension d; public void init(){ d = this.getSize (); offscreenImage = this.createImage ( d.width, d.height ); offscreenImageG = offscreenImage.getGraphics (); // DIT GEEFT DE EXCEPTION speltijd = new Tijd(tijdspel); start(); } public Spel(String tekst, Image krijt, Image klasl){ // de afbeeldingen krijgen we doorgegeven van Main.java super(tekst); punt[0][0]=0; punt[0][1]=0; klas=klasl; krijtje = krijt; init(); } public void paint(Graphics screen){ offscreenImageG.drawImage(klas,0,0,this); // Dit zou de achtergrondafbeelding moeten tekenen s= (Graphics2D)offscreenImageG; s.drawImage(krijtje,200,200,100,100,null); // testobject om te raken if (punt!=null){ if (afstand==0){ s.drawImage(krijtje,punt[0][0],punt[0][1],50,50,null); } else { double grootte; grootte = Math.atan((grkrijt/10)/afstand); //Dit geeft een 3d effect grootte = grootte/(Math.PI/2); offscreenImageG.drawString("Grootte: "+(int)(grkrijt*grootte),50,110); s.drawImage(krijtje,punt[0][0],punt[0][1],(int)(grkrijt*grootte),(int)(grkrijt*grootte),null); } } screen.drawImage(offscreenImage,0,0,this); // dubbele buffering: wordt nu weggeschreven naar scherm } |
De code is nu nog een beetje wanordelijk, maar ik heb al een aantal dingen van volgorde en dergelijke zitten wijzigen om te testen of het dan wel werkte!
Weet iemand wat dit zou kunnen veroorzaken (ben ik ergens iets vergeten?), want ik heb wat zitten googlen en bijna alle sites gebruiken volgens mij dezelfde techniek voor dubbele buffering (swing uitgezonderd).