Spielprogrammierung mit Java
HomeAufgabenDruckenJava-Online

Animierte Actors

In vielen Spielen werden Spielfiguren nicht nur bewegt, sondern sie müssen während der Bewegung auch ihr Erscheinungsbild ändern. Der Benutzer muss den Eindruck haben, dass die Spielfiguren essen, laufen, schwimmen usw. Um dies möglichst einfach zu realisieren, können einem Actor mehrere Sprites zugeordnet werden, von denen jeweils nur eines sichtbar ist. Die Anzahl der Sprites wird beim Erzeugen des Actors als Parameter angegeben. Die einzelnen Sprites werden über eine fortlaufenden Nummer, der idSprite, angesprochen. Ist der Actor drehbar, so werden die Sprite-Bilder automatisch mitgedreht.

Beispiel 1: Dem Actor packman werden zwei Sprites zugeordnet, die abwechselnd sichtbar sind.


 

// JGameEx8a.java

import ch.aplu.jgamegrid.*;

public class JGameEx8a extends GameGrid
{
  public JGameEx8a()
  {
    super(404015);
    addActor(new Pacman(), new Location(28, 10));
    show();
  }

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

// ------------  class Pacman -----------------------
class Pacman extends Actor
{
  public Pacman()
  {
    super(true"sprites/pacman.gif"2);
  }

  public void act()
  {
    move();
    if (getNbCycles() % 20 == 0)
      turn(90);
    showNextSprite();
  }
}

Erklärungen zum Programmcode:
super("sprites/packman.gif", 2) Die Anzahl der Sprites wird beim Erzeugen des Actors als Parameter angegeben. Steht im Pfad des Sprites packman.gif, so müssen die 2 Bilder als packman_0.gif und packman_1.gif im Verzeichnis sprites gespeichert werden
showNextSprite()

Die beiden Sprites werden abwechselnd sichtbar

 

Beispiel 2: Im Beispiel 2 werden dem Actor 3 verschiedene Sprites zugeordnet, die periodisch der Reihe nach angezeigt werden. Mit einem GameGrid mit der Zellengrösse 1 Pixel erreicht man fliessende Figurenbewegungen.

Der Kopf bewegt sich unter gleichzeitiger Veränderung der Physionomie hin und her.
 

// JGameEx8.java

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

public class JGameEx8 extends GameGrid
{
  public JGameEx8()
  {
    super(6006001);
    setBgColor(Color.darkGray);
    addActor(new Head()new Location(136200));
    show();
  }

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

// ------------  class Head -----------------------
class Head extends Actor
{
  private double dir = 30;

  public Head()
  {
    super("sprites/head.gif"3);
    setDirection(dir);
  }

  public void act()
  {
    showNextSprite();
    if (getX() > 450)
    {
      setDirection(180 + dir);
    }
    if (getX() < 138)
    {
      setDirection(dir);
    }
    move();
  }
}

Erklärungen zum Programmcode:
super("sprites/head.gif", 3) Im Verzeichnis sprites müssen die 3 Bilder head_0.gif, head_1.gif und head_2.gif gespeichert sein
showNextSprite() Vereinfachte Form zum Durchlaufen der Sprites

Dieses Prprogram verwendet Sprites aus der Programmcodedistribution zum Buch "Brackeen, Developing Games in Java".