v4.x/Physics: Unterschied zwischen den Versionen
(→Verschiedene Objekte) |
|||
Zeile 28: | Zeile 28: | ||
<source lang="java"> | <source lang="java"> | ||
+ | |||
import ea.*; | import ea.*; | ||
import ea.actor.*; | import ea.actor.*; | ||
Zeile 38: | Zeile 39: | ||
private Rectangle wall; | private Rectangle wall; | ||
private Circle ball; | private Circle ball; | ||
− | |||
public Dominoes() { | public Dominoes() { | ||
setupBasicObjects(); | setupBasicObjects(); | ||
− | makeDominoes(20, | + | makeDominoes(20, 0.4f, 3f); |
− | |||
− | |||
− | |||
} | } | ||
private void setupBasicObjects() { | private void setupBasicObjects() { | ||
ground = new Rectangle(200, 2); | ground = new Rectangle(200, 2); | ||
− | ground.setCenter(0, - | + | ground.setCenter(0, -5); |
ground.setColor(Color.WHITE); | ground.setColor(Color.WHITE); | ||
add(ground); | add(ground); | ||
− | ball = new Circle( | + | ball = new Circle(0.5f); |
ball.setColor(Color.RED); | ball.setColor(Color.RED); | ||
− | ball.setPosition(-10, | + | ball.setPosition(-10, -2); |
add(ball); | add(ball); | ||
wall = new Rectangle(1, 40); | wall = new Rectangle(1, 40); | ||
− | wall.setPosition(- | + | wall.setPosition(-14, -4); |
wall.setColor(Color.WHITE); | wall.setColor(Color.WHITE); | ||
add(wall); | add(wall); | ||
− | |||
− | |||
− | |||
− | |||
} | } | ||
Zeile 72: | Zeile 65: | ||
for(int i=0; i<num; i++) { | for(int i=0; i<num; i++) { | ||
Rectangle beam = new Rectangle(beamWidth, beamHeight); | Rectangle beam = new Rectangle(beamWidth, beamHeight); | ||
− | beam.setPosition(i* | + | beam.setPosition(i*3*(beamWidth), -4); |
beam.setColor(Color.BLUE); | beam.setColor(Color.BLUE); | ||
add(beam); | add(beam); | ||
Zeile 78: | Zeile 71: | ||
} | } | ||
} | } | ||
+ | |||
</source> | </source> | ||
+ | |||
+ | Dieser Code baut ein einfaches Spielfeld auf: Ein roter Ball, ein paar Dominosteine, und ein weißer Boden mit Wand. | ||
+ | |||
+ | [[Datei:Physik Demo 1 Setup.png|mini|Das Spielbrett ist aufgebaut, allerdings passiert noch nichts interessantes. Zeit für Physik!]] | ||
=== Die Body Types === | === Die Body Types === | ||
Zeile 88: | Zeile 86: | ||
− | Mit der Methode [https://docs.engine-alpha.org/4.x/ea/actor/Actor.html#setBodyType-ea.actor.BodyType- <code>Actor.setBodyType(BodyType)] wird das grundlegende Verhalten eines Actors bestimmt. | + | Mit der Methode [https://docs.engine-alpha.org/4.x/ea/actor/Actor.html#setBodyType-ea.actor.BodyType- <code>Actor.setBodyType(BodyType)</code>] wird das grundlegende Verhalten eines Actors bestimmt. |
+ | |||
+ | |||
+ | |||
+ | {| class="wikitable" style="text-align: center;" | ||
+ | ! | ||
+ | ! <code>BodyType.STATIC</code> | ||
+ | ! <code>BodyType.DYNAMIC</code> | ||
+ | ! <code>BodyType.KINEMATIC</code> | ||
+ | ! <code>BodyType.SENSOR</code> | ||
+ | ! <code>BodyType.PARTICLE</code> | ||
+ | |- | ||
+ | ! Kann mit [https://docs.engine-alpha.org/4.x/ea/actor/Actor.html#setPosition-float-float- <code>Actor.setPosition</code>] bewegt werden | ||
+ | | ✔ | ||
+ | | ✔ | ||
+ | | ✔ | ||
+ | | ✔ | ||
+ | | ✔ | ||
+ | |} |
Version vom 9. Juni 2023, 14:09 Uhr
Dies ist ein Tutorial für die Engine Alpha 4.x. Diese funktioniert anders als die EDU-Version. Du findest eine Übersicht über alle Tutorials hier.
Inhaltsverzeichnis
Inhalt
In diesem Tutorial:
- Manipulierst du die (simulierten) physikalischen Eigenschaften von verschiedenen Actors in der Engine.
- Lernst
Physik in der Engine
Seit Version 4.0 nutzt Engine Alpha eine Java-Version von Box2D. Diese mächtige und effiziente Physics-Engine ist in der Engine leicht zu bedienen und ermöglicht es, mit wenig Aufwand mechanische Phänomene in Deine Spiele zu bringen: von Platforming und Billiard bis zu Hängebrücken und Autos.
Die Physics Engine basiert auf den Prinzipien der Klassischen Mechanik. Ein Grundverständnis hierüber ist nötig: Begriffe wie Masse, Dichte, Impuls und Kraft sollten dir zumindest grob geläufig sein, um diese auf deine Spielobjekte anzuwenden.
Beispiel 1: Dominos
Um die Grundlagen der Engine Alpha Physics zu testen, bauen wir eine einfache Kettenreaktion: Ein Ball wird gegen eine Reihe von Dominos geworfen.
Setup ohne Physics
Bevor wir die Physik einschalten, bauen wir das Spielfeld mit allen Objekten auf:
import ea.*;
import ea.actor.*;
import java.awt.Color;
public class Dominoes extends Scene {
private Rectangle ground;
private Rectangle wall;
private Circle ball;
public Dominoes() {
setupBasicObjects();
makeDominoes(20, 0.4f, 3f);
}
private void setupBasicObjects() {
ground = new Rectangle(200, 2);
ground.setCenter(0, -5);
ground.setColor(Color.WHITE);
add(ground);
ball = new Circle(0.5f);
ball.setColor(Color.RED);
ball.setPosition(-10, -2);
add(ball);
wall = new Rectangle(1, 40);
wall.setPosition(-14, -4);
wall.setColor(Color.WHITE);
add(wall);
}
private void makeDominoes(int num, float beamWidth, float beamHeight) {
for(int i=0; i<num; i++) {
Rectangle beam = new Rectangle(beamWidth, beamHeight);
beam.setPosition(i*3*(beamWidth), -4);
beam.setColor(Color.BLUE);
add(beam);
}
}
}
Dieser Code baut ein einfaches Spielfeld auf: Ein roter Ball, ein paar Dominosteine, und ein weißer Boden mit Wand.
Die Body Types
Wir erwarten verschiedenes Verhalten von den physikalischen Objekten:
- Der Ball und die Dominos sollen sich verhalten wie normale physische Objekte: Der Ball prallt an den Dominos ab und die Steine fallen um. Diese Objekte
- Aber der Boden und die Wand sollen nicht wie die Dominos umfallen. Egal mit wie viel Kraft ich den Ball gegen die Wand werfe, sie wird niemals nachgeben.
Mit der Methode Actor.setBodyType(BodyType)
wird das grundlegende Verhalten eines Actors bestimmt.
BodyType.STATIC
|
BodyType.DYNAMIC
|
BodyType.KINEMATIC
|
BodyType.SENSOR
|
BodyType.PARTICLE
| |
---|---|---|---|---|---|
Kann mit Actor.setPosition bewegt werden
|
✔ | ✔ | ✔ | ✔ | ✔ |