api:documentation:spiele:sprites
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Vorhergehende Überarbeitung | |||
— | api:documentation:spiele:sprites [2025/04/06 08:11] (aktuell) – martin | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Sprites ====== | ||
+ | <WRAP center round info 80%> | ||
+ | Sprites ([[https:// | ||
+ | * [[https:// | ||
+ | </ | ||
+ | |||
+ | ===== Beispiel 1: Raumschiff und Smilies ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Sprite raumschiff = new Sprite(400, 300, SpriteLibrary.Ship_1, | ||
+ | |||
+ | raumschiff.scale(0.5); | ||
+ | raumschiff.rotate(30); | ||
+ | |||
+ | for(int i = 0; i < 100; i++) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | <WRAP left round info 80%> | ||
+ | Ein Sprite wird durch die Angabe der x- und y-Koordinate seines " | ||
+ | <code myJava> | ||
+ | new Sprite(400, 300, SpriteLibrary.Ship_1, | ||
+ | </ | ||
+ | etwa instanziert ein Sprite, das das erste (index == 0) Bild der Bilderfolge " | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Übersicht über die Bilderfolgen ===== | ||
+ | [[https:// | ||
+ | |||
+ | ===== Animation von Sprites ===== | ||
+ | <WRAP left round info 80%> | ||
+ | Es gibt Bilderfolgen, | ||
+ | <code myJava> | ||
+ | Sprite explosion = new Sprite(400, 300, SpriteLibrary.Explosion_1, | ||
+ | explosion.playAnimation(0, | ||
+ | </ | ||
+ | Spielt die Bilder mit den Indizes 0 bis 63 (jeweils einschließlich) mit der Geschwindigkeit 15 Bilder pro Sekunde ab, wobei nach dem 63. Bild die Animation wieder von vorne begonnen wird (RepeatType.loop). | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Sprite explosion = new Sprite(400, 300, SpriteLibrary.Explosion_1, | ||
+ | explosion.scale(6); | ||
+ | explosion.playAnimation(0, | ||
+ | |||
+ | while(true); | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Kollision ===== | ||
+ | Wie bei allen anderen Grafikobjekten kann auch bei Sprites mit er Methode '' | ||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | new RechteckAngriff(); | ||
+ | |||
+ | class RechteckAngriff extends Actor { | ||
+ | |||
+ | Group rechtecke = new Group(); | ||
+ | | ||
+ | |||
+ | | ||
+ | super(); | ||
+ | ship.scale(0.5); | ||
+ | } | ||
+ | |||
+ | | ||
+ | if(Math.random() < 0.3) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | Shape[] kollidierendeRechtecke = rechtecke.getCollidingShapes(ship); | ||
+ | |||
+ | for(Shape shape : kollidierendeRechtecke) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | class FliegendesRechteck extends Rectangle { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | super(800, Math.random() * 600, Math.random() * 50 + 20, Math.random() * 100 + 20); | ||
+ | this.setBorderColor(null); | ||
+ | this.setFillColor((int)(Math.random() * 0xffffff), 0.5); | ||
+ | } | ||
+ | |||
+ | | ||
+ | move(-15, vy); | ||
+ | rotate(vAngle); | ||
+ | if(getCenterX() < 0) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Tiled Sprites ===== | ||
+ | {{ : | ||
+ | <WRAP left round info 50%> | ||
+ | * Die Methode '' | ||
+ | * Alle Methodenaufrufe des Sprites (z.B. '' | ||
+ | * Möchte man die einzelnen Kachelbilder verändern, so erhält man mit der Methode '' | ||
+ | * Die Methode '' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | new Beweger(); | ||
+ | |||
+ | class Beweger extends Actor { | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | s = new Sprite(200, 200, SpriteLibrary.Boulders, | ||
+ | s.makeTiling(160, | ||
+ | s.scale(3); | ||
+ | } | ||
+ | |||
+ | void act() { | ||
+ | s.getTileImage().move(2, | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Sprite als Hintergrundbild setzen ===== | ||
+ | |||
+ | <WRAP left round info 50%> | ||
+ | Die Methode '' | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | new Circle(300, 200, 100).setFillColor(0xff2020); | ||
+ | |||
+ | Sprite s = new Sprite(200, 200, SpriteLibrary.Background, | ||
+ | |||
+ | s.setAsBackgroundImage(); | ||
+ | |||
+ | // Zur Info: Die Methode setAsBackground macht dasselbe wie: | ||
+ | // s.moveTo(World.getWorld().getLeft() + World.getWorld().getWidth() / 2, World.getWorld().getTop() + World.getWorld().getHeight() / 2); | ||
+ | // s.scale(World.getWorld().getHeight() / s.getHeight()); | ||
+ | // s.sendToBack(); | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||