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.

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;
    private Rectangle angle;

    public Dominoes() {
        setupBasicObjects();
        makeDominoes(20, 1, 8);

        getCamera().setPostion(10, 6);
        getCamera().setZoom(15f);
    }

    private void setupBasicObjects() {
        ground = new Rectangle(200, 2);
        ground.setCenter(0, -1);
        ground.setColor(Color.WHITE);
        add(ground);

        ball = new Circle(1);
        ball.setColor(Color.RED);
        ball.setPosition(-10, 1);
        add(ball);

        wall = new Rectangle(1, 40);
        wall.setPosition(-15, 0);
        wall.setColor(Color.WHITE);
        add(wall);

        angle = new Rectangle(1, 0.5f);
        angle.setColor(Color.GRAY);
        add(angle);
    }

    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*2*(beamWidth), 0);
            beam.setColor(Color.BLUE);
            add(beam);
        }
    }
}