api:documentation:spiele:worldtransformations
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
api:documentation:spiele:worldtransformations [2021/02/05 18:14] – Martin Pabst | api:documentation:spiele:worldtransformations [2021/05/30 23:42] – Martin Pabst | ||
---|---|---|---|
Zeile 6: | Zeile 6: | ||
* '' | * '' | ||
* '' | * '' | ||
+ | |||
+ | \\ **Statische Elemente:** \\ | ||
+ | Oft möchte man Anzeigen für Punkte, Leben usw. darstellen, die immer am selben Platz erscheinen sollen. Für diese Zwecke besitzt jedes graphische Element die Methode '' | ||
+ | |||
+ | \\ **Der Spielerfigur folgen:** \\ | ||
+ | Soll die Welt immer so scrollen, dass sie der Spielerfigur folgt, so erreicht man dies mit der Methode '' | ||
</ | </ | ||
+ | ===== Demo-Programm zu World-Transformationen und setStatic ===== | ||
+ | Steuere das Raumschiff mit den **Pfeiltasten nach links/ | ||
< | < | ||
- | <div class=" | + | <div class=" |
<script type=" | <script type=" | ||
Zeile 20: | Zeile 28: | ||
| | ||
int time = 0; | int time = 0; | ||
+ | |||
+ | Text pointsDisplay; | ||
| | ||
Zeile 37: | Zeile 47: | ||
ship = new Sprite(400, 300, SpriteLibrary.Ship_1, | ship = new Sprite(400, 300, SpriteLibrary.Ship_1, | ||
- | ship.scale(0.3); | ||
ship.rotate(90); | ship.rotate(90); | ||
+ | |||
+ | pointsDisplay = new Text(20, 20, 60, "" | ||
+ | pointsDisplay.setFillColor(Color.white); | ||
+ | pointsDisplay.setBorderColor(Color.red); | ||
+ | pointsDisplay.setStatic(true); | ||
} | } | ||
Zeile 67: | Zeile 81: | ||
new Circle(centerX, | new Circle(centerX, | ||
| | ||
+ | | ||
} | } | ||
Zeile 78: | Zeile 93: | ||
} | } | ||
- | }</ | + | } |
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Demo-Programm zur Methode follow ===== | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Die Methode '' | ||
+ | * Figur - Die Figur, die ins Zentrum gerückt werden soll | ||
+ | * margin - Das Koordinatensystem wird nicht verschoben, wenn die Figur sichtbar und mindestens '' | ||
+ | * xMin - Das Koordinatensystem wird höchstens so weit nach links verschoben, dass der linke Rand die x-Koordinate xMin hat. | ||
+ | * xMax - Das Koordinatensystem wird höchstens so weit nach rechts verschoben, dass der rechte Rand die x-Koordinate xMax hat. | ||
+ | * yMin - Das Koordinatensystem wird höchstens so weit nach oben verschoben, dass der obere Rand die y-Koordinate yMin hat. | ||
+ | * yMax - Das Koordinatensystem wird höchstens so weit nach unten verschoben, dass der untere Rand die y-Koordinate yMax hat. | ||
+ | |||
+ | \\ VORSICHT: \\ | ||
+ | Die Methode verschiebt das Welt-Koordinatensystem **nur ein einziges Mal**. Soll die Welt einer Spielfigur folgen, so muss diese Methode immer wieder aufgerufen werden. Am besten platzierst Du sie dazu in der '' | ||
+ | </ | ||
+ | |||
+ | |||
+ | **Vielen Dank an Jürgen Horzella für die Programmvorlage!** \\ \\ | ||
+ | Steuere den grünen Helden mit den **Pfeiltasten**! | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Spiel s = new Spiel(); | ||
+ | |||
+ | public class Spiel extends Actor { | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Shape standingOn; | ||
+ | |||
+ | Group plattforms = new Group(); | ||
+ | |||
+ | | ||
+ | |||
+ | Rectangle ground = new Rectangle(-5000, | ||
+ | ground.setFillColor(Color.gray); | ||
+ | plattforms.add(ground); | ||
+ | |||
+ | for(int i = 1; i < 10; i++) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | star = new Circle[4]; | ||
+ | star[0] = new Circle(300, 400, 10); | ||
+ | star[1] = new Circle(400, 300, 10); | ||
+ | star[2] = new Circle(500, 300, 10); | ||
+ | star[3] = new Circle(100, 450, 10); | ||
+ | for(int i = 0; i <= 3; i++) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | spielfigur = new Rectangle(200, | ||
+ | spielfigur.setFillColor(Color.green); | ||
+ | vx = 0; | ||
+ | vy = 0; | ||
+ | ay = gravity; | ||
+ | |||
+ | mx = 300; | ||
+ | my = 300; | ||
+ | r = 100; | ||
+ | t = 0; | ||
+ | w = 0.05; | ||
+ | bombe = new Circle(mx, my, 20); | ||
+ | bombe.setFillColor(Color.red); | ||
+ | } | ||
+ | |||
+ | | ||
+ | getWorld().follow(spielfigur, | ||
+ | |||
+ | vy = vy + ay; | ||
+ | spielfigur.move(vx, | ||
+ | |||
+ | t = t + 1; | ||
+ | bombe.moveTo(mx + r * Math.cos(w * t), my + r * Math.sin(w * t)); | ||
+ | |||
+ | if(spielfigur.collidesWith(bombe)) { | ||
+ | | ||
+ | } | ||
+ | |||
+ | |||
+ | if(standingOn != null) { | ||
+ | | ||
+ | standingOn = null; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if(standingOn == null) { | ||
+ | | ||
+ | | ||
+ | |||
+ | spielfigur.moveBackFrom(platform, | ||
+ | |||
+ | Direction d = spielfigur.directionRelativeTo(platform); | ||
+ | switch(d) { | ||
+ | case top : | ||
+ | standingOn = platform; | ||
+ | break; | ||
+ | case bottom : | ||
+ | vy = 1; | ||
+ | spielfigur.moveBackFrom(platform, | ||
+ | case left : | ||
+ | case right : | ||
+ | vx *= -1; | ||
+ | spielfigur.moveBackFrom(platform, | ||
+ | spielfigur.move(0, | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | if(standingOn != null) { | ||
+ | vy = 0; | ||
+ | ay = 0; | ||
+ | } | ||
+ | else { | ||
+ | ay = gravity; | ||
+ | } | ||
+ | |||
+ | for(int i = 0; i <= 3; i++) { | ||
+ | | ||
+ | punkte++; | ||
+ | star[i].moveTo(5, | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if(isKeyDown(Key.ArrowUp) && standingOn != null) { | ||
+ | vy = jump; | ||
+ | } | ||
+ | |||
+ | if(isKeyDown(Key.ArrowRight)) { | ||
+ | vx = speed; | ||
+ | } else if(isKeyDown(Key.ArrowLeft)) { | ||
+ | vx = -speed; | ||
+ | } else { | ||
+ | vx = 0; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </ | ||
</ | </ | ||
</ | </ |
api/documentation/spiele/worldtransformations.txt · Zuletzt geändert: 2021/12/29 11:29 von 127.0.0.1