Bei Greenfoot von einem Actor auf ein Attribut/Methode der welt zugreifen?

1 Antwort

Die Klasse World wird von Greenfoot bereitgestellt und ist somit erst einmal unveränderbar. Wenn du von ihr eine Klasse ableitest und diese via getWorld anforderst, benötigst du einen expliziten Typecast.

class MyWorld extends World {
  private int agility;

  public MyWorld() {
    super(100, 100, 10);
  }

  public int getAgility() {
    return agility;
  }
}

// usage in Actor:
MyWorld myWorld = (MyWorld) getWorld();
int agility = myWorld.getAgility();                   

gastproblem42 
Beitragsersteller
 15.12.2021, 20:14

Vielen Dank,

die Fehlermeldung ist weg, bin also ein Schritt weiter. Aber sobald ich das Programm starte, fragt es die Beweglichkeit ab, kurz erscheint das Spielfeld, aber dann kommt die folgende Fehlermeldung:

java.lang.NullPointerException

   at Zombie.<init>(Zombie.java:19)

   at MyWorld.prepare(MyWorld.java:36)

   at MyWorld.<init>(MyWorld.java:27)

Wenn ich das richtig verstehe, findet er beim Präparieren des Zombie dann doch nicht die Methode (bei Abfrage Attribut gleicher Fehler) und gibt den Wert Null zurück, aber wie kann ich das verhindern, vor allem, weil er ja kurz (1/10s) das Spielfeld zeigt, es offensichtlich ja präpariert.

0
regex9  16.12.2021, 05:49
@gastproblem42

Eine NullPointerException weist immer daraufhin, dass gerade versucht wird, mit einem Objekt zu operieren, welches nicht existiert.

Plumpes Beispiel:

class Dog {
  void move() {
  }
}

// main:
Dog dog = null;
dog.move(); // NullPointerException

Schau in Zeile 19 deiner Zombie.java: Eines der Objekte dort existiert zum Zeitpunkt des Aufrufes nicht.

0