Spielprogrammierung mit Java
HomeAufgabenDruckenJava-Online

Actors

Alle Figuren und Gegenstände , die im Spielfenster erscheinen, werden als Objekte aufgefasst und mit Klassen, die von der Klasse Actor abgeleitet sind, beschrieben. Dadurch lässt sich bereits bei den ersten Programmbeispielen das OOP-Konzept vorbildlich realisieren. Jedem Actor ist ein Sprite-Bild zugeordnet. Der Dateiname des Bildes wird im Konstruktor des Actors angegeben. (Einem Actor können auch mehrere Bilder zugeordnet werden).  

Das Grundkonzept von JGameGrid besteht darin, den Actors ein dynamisches "Eigenleben" zu geben. Sobald im Navigationsbalken die Schaltlfläche Run gedrückt wird, startet ein Simulationszyklus, in dem die Methode act() periodisch aufgerufen wird. Die Simulationsperiode kann mit dem Schieberegler verändert werden. In jedem Simulationszyklus wird auch der Hintergrund neu aufgebaut. Dadurch lassen sich Animationen auf einfache Art realisieren (dieses elegante Konzept wurde von Greenfoot übernommen).

Beim Klicken auf die Schaltfläche Step wird die Simulationsschleife nur einmal durchlaufen. Damit lässt sich der Ablauf schrittweise ausführen. Beim Klicken auf Reset wird die Startposition automatisch wieder hergestellt.

Nach dem Starten der Animation kann durch Klickne auf Pause die Animation jederzeit angehalten und mit Run oder Step wieder weitergeführt werden.

 





Beispiel 1: Der Actor nemo bewegt sich horizontal von Zelle zur Zelle und verschwindet am rechten Rand

// ActorEx1.java

import ch.aplu.jgamegrid.*;
import java.awt.Color;

public class ActorEx1 extends GameGrid
{
  public ActorEx1()
  {
    super(101060Color.red);
    Fish nemo = new Fish();
    addActor(nemo, new Location(14));
    show();
  }

  public static void main(String[] args)
  {
    new ActorEx1();
  }
}

// ------------- class Fish --------------------
class Fish extends Actor
{
  public Fish()
  {
    super("sprites/nemo.gif");
  }
  
  public void act()
  {
    move();
  }
}

 

 
Erklärungen zum Programmcode:
class Fish extends Actor Die Klasse Fish wird von der Klasse Actor abgeleitet und erbt dadurch alle (nicht privaten Methoden) dieser Klasse
public Fish()
{
    super("sprites/nemo.gif");
}
Im Konstruktor der Klasse Fish wird der Dateiname des zugehöriges Sprite-Bildes angegeben
act() In der Methode act() wird deklariert, was der Actor tun soll
move() Verschiebt den Actor in die benachbarte Zelle. Bei der Erzeugung des Actors erhält dieser die Standardrichtung 0° (gegen Osten)
Fish nemo = new Fish() Erzeugt ein Objekt nemo der Klasse Fish. Da Fish von der Klasse Actor abgeleitet ist, ist nemo ein Actor
addActor(nemo,  new Location (1 ,  4)) Der Actor wird zum GameGrid hinzugefügt und erscheint an der angegebenen Position. In einem 10x10 Gitter kann x und y die Werte 0 bis 9 annehmen. Das Actor-Bild wird zentriert in den Zellen positioniert und kann auch über die Zellengrenzen herausragen
show() Das Spielfenster und sich darin befindender Actor werden angezeigt


Beispiel 2: Nemo als Instanz der Klasse Actor

Das Objekt nemo kann direkt in der Applikationsklasse als Instanz der Klasse Actor erzeugt werden. Da die Methode act() auch vom GameGrid automatisch aufgerufen wird, können die Aktionen des Actors in der Applikationsklasse deklariert werden. Dadurch entfält die zweite Klasse Fish und der Programmcode wird etwas einfacher.

// MyGame.java

import ch.aplu.jgamegrid.*;
import java.awt.Color;

public classMyGame extends GameGrid
{
  private Actor nemo = new Actor("sprites/nemo.gif");

  public MyGame()
  {
    super(101060Color.red);
    addActor(nemo, new Location(14));
    show();
  }

  public void act()
  {
    nemo.move();
  }

  public static void main(String[] args)
  {
    new MyGame();
  }
}

Erklärungen zum Programmcode:
private Actor nemo = new Actor("sprites/nemo.gif") Erstellt eine Instanz der Klasse Actor mit dem Namen nemo, dabei wird der Pfad zu der Bilddatei angegeben. Da nemo in der Methode act() verwendet wird, muss es sich um eine Instanzvariable handeln
nemo.move() Da move() eine Methode der Klasse Actor ist, muss nemo vorangestellt werden