Greenfoot Musik von anderen klassen stoppen?

1 Antwort

Dazu musst du mindestens die Instanz der Spielwelt für andere Objekte zugänglich machen. Das Objekt game sollte zum einen ein Instanzattribut sein (keine lokale Variable) und zum anderen solltest du ihr einmal einen passenden Namen verpassen.

Ergänze die Klasse Spielwelt zuerst einmal um eine neue Methode:

public void stopSound() {
  gameSound.stop();
}

Die Variable game habe ich in gameSound umbenannt. Vielleicht fällt dir noch ein besserer Name ein.

Die Methode in der Klasse GameOver, die nun die Musik stoppen soll, muss um einen Parameter erweitert werden:

public void doSomething(GameWorld world) {
  // do something ...
  world.stopSound();
  // do something other ...
}

Wenn du den Sound in mehreren Methoden stoppen lassen möchtest, könnte es sinnvoller sein, die Instanz der Spielwelt bereits im Konstruktor zu übergeben und als Attribut zu speichern:

public class GameOver {
  private GameWorld world;

  public GameOver(GameWorld world) {
    this.world = world;
  }

  public void doSomething() {
    // ...
    world.stopSound();
  }
}   

Bei Aufruf der Methoden / des Konstruktors muss die Instanz deiner Spielwelt natürlich übergeben werden:

GameWorld world = new GameWorld();
GameOver gameOver = new GameOver(world);

// or if using methods with param
gameOver.doSomething(world);

Davon ab solltest du einmal einen einheitlichen Stil wahren und deine Bezeichner nur in einer Sprache wählen - so wie ich es in meinen Code-Beispielen getan habe.

Flugzahn 
Fragesteller
 03.10.2018, 23:56

Vielen dank hat mir sehr weitergeholfen, aber ich habe noch eine frage. Wie kann ich verhindern dass ich random gesetzte wände in einem Spieler spawnen?

0
regex9  03.10.2018, 23:59
@Flugzahn

Vergleiche die Position von Wand und Spieler (genauer: Ihre jeweilige Fläche, Stichwort: intersects), bevor du die Wand erzeugen lässt.

0