Toon posts:

[java] geanimeerde pacman (2e keer)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ok, sorry voor daarnet, was niet helemaal duidelijk wat het probleem was.

zie http://gathering.tweakers.net/forum/list_messages/625142 voor de code

Bij het debuggen, krijg ik in Jbuilder het volgende:
code:
1
gB = buffer.getGraphics();


Dit geeft de volgende error: "Hit uncaught exception java.lang.NullPointerException"

Ik had eerst een stuk code gemaakt waar alleen de pacman geanimeerd was en heb daarna de code geimplementeerd in de pacman-source. Alleen doet ie daar niet wat hij hoort te doen.

De 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
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
54
55
56
57
58
59
60
61
62
63
64
public class animationtest extends Applet {
Animatie anim;
 public void init () {

 }
 public void start() {
  if (anim == null) {
   if (getGraphics() !=null ) {
     anim = new Animatie(getGraphics(),this);
     anim.start();
   }
  }

 }

 public void paint(Graphics g) {

 }
}

class Animatie extends Thread {
private boolean doorgaan;
private Graphics g, gB;
private Applet applet;
private Image buffer;
private Image[] rechts;
 public Animatie (Graphics g, Applet applet) {
  this.g = applet.getGraphics();
  this.doorgaan = true;
  this.applet = applet;
  rechts = new Image[10];
   for(int i=0; i<10; i++) {
    rechts[i] = applet.getImage(applet.getDocumentBase(), "images/pacright000"+ i + ".png");
    System.out.print(applet.getDocumentBase()+"images/pacright000"+ i + ".png");
   }
  buffer = applet.createImage(applet.getSize().width,applet.getSize().height);
  gB = buffer.getGraphics();

 }

 public void  run() {
  int i=0;
  Image frame;
  while (doorgaan) {
   frame = rechts[i % rechts.length];
     applet.repaint();

   if (frame !=null) {
      gB.drawImage(frame,50,50,applet);
   }
   g.drawImage(buffer,0,0,applet);
   slaap(15);
   gB.setColor(applet.getBackground());
   gB.fillRect(0,0,applet.getSize().width,applet.getSize().height);
   i++;
  }
 }

 private void slaap(int millisec) {
  try {
   Thread.sleep(millisec);
  } catch (InterruptedException e) {}
 }
}


Deze doet het weer wel terwijl deze code helemaal in de andere code geimplementeerd is.

Ik ben geen pro in java, dus wilde het aan de experts vragen of die misschien in een blik de fout zien.

Ik ben al een tijd bezig, maar weet niet wat het probleem is. Ik vraag ook niet om een nieuwe herscheven code, maar gewoon of iemand die fout ziet.

Dus als iemand tijd heeft om eventjes te kijken?

TechXP

Verwijderd

Ik zie niet zo snel waarom, maar buffer is null... dus createImage geeft null terug... ik heb het zelf ook een keer gehad, maar ik weet niet meer precies wat de fout nou was

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Het is nogal simpel. In initwhatever method levert je getGraphics gewoon null op, omdat je nog geen image hebt (die wordt pas geleverd door de browser in paint)

Nog wat puntjes voor je code:
• Classnamen schrijf je met een hoofdletter (dus Animationtest ipv animationtest )
• Gebruik geen freaky afkortingen voor variabelen (dus niet anim, maar bij _pacmanAnimation )
• Schrijf commentaar
• Maak geen lege methodes als init( ) { }
• Geef geen objecten door die je niet nodig hebt, (like Graphics in Animatie) dat wekt verwarring
• Het is mooier om implements runnable te doen ipv extends Thread.
• Geef elke variabele van een class een accessmodifier

BTW je naam onder je post hoeft niet.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Altijd fijn die blijde responses van de topicstarter om te vertellen of het gelukt is! Daar doe je het voor :/

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Glimi schreef op 18 oktober 2002 @ 21:21:
Altijd fijn die blijde responses van de topicstarter om te vertellen of het gelukt is! Daar doe je het voor :/


beetje overdreven Glimi, de topic is gisteren geopend, misschien heeft de TS in kwestie gewoon nog geen tijd gehad om het te proberen of te reageren

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
.oisyn schreef op 18 oktober 2002 @ 21:25:
beetje overdreven Glimi, de topic is gisteren geopend, misschien heeft de TS in kwestie gewoon nog geen tijd gehad om het te proberen of te reageren
10 minuten na het posten van de vraag staat het antwoord er. De eerste reply staat er na een krappe 8 minuten. Je gaat me niet vertellen dat als je een topic plaatst er geen aandacht meer aan gaat besteden binnen 24 uur, zie ook de volgende tekst van de TS:
Ik ben al een tijd bezig, maar weet niet wat het probleem is. Ik vraag ook niet om een nieuwe herscheven code, maar gewoon of iemand die fout ziet.

Dus als iemand tijd heeft om eventjes te kijken?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 10:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Glimi schreef op 18 oktober 2002 @ 21:34:
10 minuten na het posten van de vraag staat het antwoord er. De eerste reply staat er na een krappe 8 minuten. Je gaat me niet vertellen dat als je een topic plaatst er geen aandacht meer aan gaat besteden binnen 24 uur, zie ook de volgende tekst van de TS:


rustig maar, ik ben ook maar de goedgezinde lite-mod van P&W, en niet zo'n botte lul als D2k :P ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 10:19

D2k

.oisyn schreef op 18 oktober 2002 @ 21:36:
[nohtml]
[...]
[/nohtml]

rustig maar, ik ben ook maar de goedgezinde lite-mod van P&W, en niet zo'n botte lul als D2k :P ;)

je bent _nog_ een litemod >:)

Doet iets met Cloud (MS/IBM)


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
D2k schreef op 18 oktober 2002 @ 21:56:
je bent _nog_ een litemod >:)
En dan ook nog een die arrays gebruikt binnen een OO taal :/ :+ ;)

  • tomato
  • Registratie: November 1999
  • Niet online
Och, soms komen mensen er heel laat alsnog achter dat ze een draadje hadden lopen... :|

Verwijderd

Topicstarter
Ik heb de laatste tijd weinig tijd gehad (ben een beetje ziek, veel opdrachten die ik nog moest afmaken, etc.), dus heb er nog niet veel tijd aan besteed.
Het is trouwens verder nog niet gelukt. Ik denk dat ik de code nog wat ga herschrijven.

In ieder geval bedankt voor jullie reacties.

En ik laat wel wat horen als het gelukt is...

Verwijderd

Uhmmm sounds like ja1 opdracht HI-fontys eindhoven

Verwijderd

Topicstarter
Uhmmm sounds like ja1 opdracht HI-fontys eindhoven
Nope! Een java opdracht voor de HvA (Hogere Informatica)

Opdracht is eigenlijk om een pacman te laten bewegen, en waar je ook de snelheid kan instellen van het pacmannetje. Alleen ik breid deze iets uit :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Als je toch bezig bent met een eigen implementatie, dan adviseer ik je echt om naar het MVC design pattern te kijken. Hiermee krijg je een hele duidelijke scheiding tussen je data/logica (het model dus) en de visualisatie van dat model (de view).

En volgens mij ga je ook concurrency problemen krijgen. Je loopt namelijk berichten te versturen van een thread anders dan de event dispatching thread. Ik ben verder niet thuis in graphics en awt gebeuren, maar ik kan me voorstellen dat niet alle methodes synchronized zijn, met alle gevolgen van dien. Als ik jou was keek ik even naar de Timer class. Dit is precies de functionaliteit die jij wilt hebben (om de x milliseconden een actie) en die vinden plaats op de event dispatching thread.

Verwijderd

Topicstarter
Ik heb mijn pacman af (het kan hier en daar nog verbeterd worden, maar ja, hij is goed voor het moment). De code kan je hier vinden: http://home.hccnet.nl/a.romijn/java/pacman.zip
Ik heb nog wel problemen met openen in browsers, maar als je hem gewoon build in JBuilder dan lukt het perfect.

  • wacco
  • Registratie: Augustus 2002
  • Laatst online: 21-03-2023

wacco

cli, hlt.

HvA, I101 of I102 (is er een 103? zou het niet eens weten....)? :)
* wacco zit in E102... :9 (electro...)

if (jij niet sebas bent) {
if (je klas I102 is) { doe em ff de groetjes van michael; };
}
:)

Spolap: Interactive webcomic


Verwijderd

Topicstarter
String klasnummer="I101";
public string getKlasnummer() {
return klasnummer;
}
String s=getKlasnummer();
g.drawString(s,0,0);

I101

:)

PS. Hier nog een screenshot van mijn pacman, als je hem niet wilt gaan compilen ofzo.
Afbeeldingslocatie: http://home.hccnet.nl/a.romijn/java/pacman1.jpg
Pagina: 1