api:documentation:spiele:worldtransformations
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
api:documentation:spiele:worldtransformations [2021/05/30 23:42] – Martin Pabst | api:documentation:spiele:worldtransformations [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 111: | Zeile 111: | ||
* yMax - Das Koordinatensystem wird höchstens so weit nach unten verschoben, dass der untere Rand die y-Koordinate yMax hat. | * yMax - Das Koordinatensystem wird höchstens so weit nach unten verschoben, dass der untere Rand die y-Koordinate yMax hat. | ||
- | \\ VORSICHT: \\ | + | \\ **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 '' | 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 '' | ||
+ | \\ \\ **Tipp:** \\ Die Koordinaten der linken oberen Ecke des sichtbaren Bereichs bekommst Du mit den Methoden '' | ||
</ | </ | ||
**Vielen Dank an Jürgen Horzella für die Programmvorlage!** \\ \\ | **Vielen Dank an Jürgen Horzella für die Programmvorlage!** \\ \\ | ||
- | Steuere den grünen | + | Steuere den Helden mit den **Pfeiltasten**! |
< | < | ||
Zeile 127: | Zeile 128: | ||
public class Spiel extends Actor { | public class Spiel extends Actor { | ||
- | | + | |
- | + | Text punkteAnzeige = new Text(20, 20, 60, "" | |
- | | + | |
| | ||
- | Rectangle | + | Sprite |
| | ||
| | ||
Zeile 138: | Zeile 138: | ||
| | ||
| | ||
- | | + | |
| | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
Shape standingOn; | Shape standingOn; | ||
Group plattforms = new Group(); | Group plattforms = new Group(); | ||
+ | Group stars = new Group(); | ||
| | ||
Zeile 158: | Zeile 159: | ||
plattforms.add(ground); | plattforms.add(ground); | ||
- | for(int i = 1; i < 10; i++) { | + | for(int i = 1; i < 6; i++) { |
- | | + | |
} | } | ||
| | ||
- | | + | |
- | star[0] = new Circle(300, 400, 10); | + | Sprite |
- | star[1] = new Circle(400, 300, 10); | + | stars.add(star); |
- | star[2] = new Circle(500, 300, 10); | + | |
- | star[3] = new Circle(100, 450, 10); | + | |
- | for(int i = 0; i <= 3; i++) { | + | |
- | star[i].setFillColor(Color.yellow); | + | |
} | } | ||
| | ||
- | spielfigur = new Rectangle(200, 400, 20, 40); | + | spielfigur = new Sprite(500, 100, SpriteLibrary.Characters_1, 0); |
- | spielfigur.setFillColor(Color.green); | + | |
vx = 0; | vx = 0; | ||
vy = 0; | vy = 0; | ||
Zeile 184: | Zeile 180: | ||
bombe = new Circle(mx, my, 20); | bombe = new Circle(mx, my, 20); | ||
bombe.setFillColor(Color.red); | bombe.setFillColor(Color.red); | ||
+ | |||
+ | punkteAnzeige.setStatic(true); | ||
+ | punkteAnzeige.setFillColor(Color.white); | ||
+ | punkteAnzeige.setBorderColor(Color.darkcyan); | ||
} | } | ||
Zeile 196: | Zeile 196: | ||
if(spielfigur.collidesWith(bombe)) { | if(spielfigur.collidesWith(bombe)) { | ||
- | | + | |
+ | } | ||
+ | |||
+ | Shape[] collidingStars = stars.getCollidingShapes(spielfigur); | ||
+ | for(Shape star : collidingStars) { | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
} | } | ||
| | ||
+ | if(isKeyDown(Key.ArrowUp) && standingOn != null) { | ||
+ | vy = jump; | ||
+ | } | ||
+ | |||
+ | if(isKeyDown(Key.ArrowRight)) { | ||
+ | vx = speed; | ||
+ | } else if(isKeyDown(Key.ArrowLeft)) { | ||
+ | vx = -speed; | ||
+ | } else { | ||
+ | vx = 0; | ||
+ | } | ||
if(standingOn != null) { | if(standingOn != null) { | ||
| | ||
standingOn = null; | standingOn = null; | ||
+ | ay = gravity; | ||
} | } | ||
} | } | ||
- | | + | Shape[] collidingPlatforms = plattforms.getCollidingShapes(spielfigur); |
- | Shape[] collidingPlatforms = plattforms.getCollidingShapes(spielfigur); | + | for(Shape platform : collidingPlatforms) { |
- | | + | |
- | + | if(platform | |
- | | + | |
- | + | ||
Direction d = spielfigur.directionRelativeTo(platform); | Direction d = spielfigur.directionRelativeTo(platform); | ||
switch(d) { | switch(d) { | ||
case top : | case top : | ||
+ | spielfigur.moveBackFrom(platform, | ||
standingOn = platform; | standingOn = platform; | ||
+ | vy = 0; | ||
+ | ay = 0; | ||
break; | break; | ||
case bottom : | case bottom : | ||
Zeile 221: | Zeile 242: | ||
spielfigur.moveBackFrom(platform, | spielfigur.moveBackFrom(platform, | ||
case left : | case left : | ||
+ | vx = -4; | ||
+ | spielfigur.moveBackFrom(platform, | ||
+ | spielfigur.move(vx, | ||
+ | break; | ||
case right : | case right : | ||
- | vx *= -1; | + | vx = 4; |
spielfigur.moveBackFrom(platform, | spielfigur.moveBackFrom(platform, | ||
- | spielfigur.move(0, vy); | + | spielfigur.move(vx, vy); |
break; | break; | ||
- | } | + | } |
} | } | ||
+ | |||
+ | |||
+ | } | ||
+ | } | ||
+ | }</ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Zyklisch-parallaktisches Scrollen ===== | ||
+ | {{ youtube> | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | new CyclicBackgroundTest(); | ||
+ | |||
+ | class CyclicBackgroundTest extends Actor { | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | int time = 0; | ||
+ | |||
+ | | ||
+ | cb1 = new CyclicBackground(new Sprite(0, 0, SpriteLibrary.Background, | ||
+ | cb2 = new CyclicBackground(new Sprite(0, 0, SpriteLibrary.Background, | ||
+ | cb3 = new CyclicBackground(new Sprite(0, 0, SpriteLibrary.Background, | ||
+ | } | ||
+ | |||
+ | | ||
+ | time++; | ||
+ | cb1.setPosition(-time, | ||
+ | cb2.setPosition(-time * 2, 200); | ||
+ | cb3.setPosition(-time * 4, 400); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | class CyclicBackground extends Group { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | spriteWidth = image.getWidth(); | ||
+ | int count = Math.ceil(getWorld().getWidth() / spriteWidth) + 1; | ||
+ | images = new Sprite[count]; | ||
+ | image.defineCenterRelative(0, | ||
+ | images[0] = image; | ||
+ | add(image); | ||
+ | for(int i = 1; i < count; i++) { | ||
+ | | ||
+ | | ||
} | } | ||
+ | } | ||
- | if(standingOn != null) { | + | void setPosition(double left, double top) { |
- | vy = 0; | + | |
- | ay = 0; | + | left -= Math.ceil(-left / spriteWidth) * spriteWidth; |
- | } | + | |
- | else { | + | |
- | ay = gravity; | + | |
} | } | ||
| | ||
- | for(int i = 0; i <= 3; i++) { | + | |
- | if(spielfigur.collidesWith(star[i])) { | + | |
- | punkte++; | + | images[i].moveTo(x, top); |
- | star[i].moveTo(5, 5); | + | x += spriteWidth; |
- | } | + | |
- | } | + | |
- | + | ||
- | if(isKeyDown(Key.ArrowUp) && standingOn != null) { | + | |
- | | + | |
} | } | ||
+ | } | ||
- | if(isKeyDown(Key.ArrowRight)) { | ||
- | vx = speed; | ||
- | } else if(isKeyDown(Key.ArrowLeft)) { | ||
- | vx = -speed; | ||
- | } else { | ||
- | vx = 0; | ||
- | } | ||
- | } | ||
} | } | ||
</ | </ | ||
Zeile 265: | Zeile 336: | ||
</ | </ | ||
+ | |||
+ |
api/documentation/spiele/worldtransformations.1622410962.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)