-
Notifications
You must be signed in to change notification settings - Fork 0
Bewegbarer Spieler
Als erstes muss eine neue Klasse erstellt werden, die einen Spieler repräsentieren kann, in welcher auch gleich noch einige Attribute erstellt werden müssen.
Jeder Spieler benötigt als Attribute die eigene Position, sowie eine Textur:
private double x,y;
private Texture textur;
Als nächstes muss ein Konstruktor erstellt werden, der beispielsweise die Startposition des Spielers festlegt und eine Textur lädt:
public Spieler( int x,int y ) {
this.x = x;
this.y = y;
textur = TextureLoader.loadTexture( "/spieler.png" );
}
Um den Spieler später rendern und updaten zu können, erstellen wir auch hierfür entsprechende Methoden, welche als Argumente die selben, wie die update- und render-Methode in der Spielsszene haben:
public void update( double deltaTime,InputHandler input ) {
}
public void render( SimpleGraphics graphics ) {
}
In der render-Methode können wir schon jetzt folgende Zeile einfügen, welche die Spielertextur an der Spielerposition rendert:
graphics.drawTexture( textur,(int)x,(int)y );
Insgesamt sieht die Spieler-Klasse also bis jetzt so aus (ohne Imports):
public class Spieler {
private double x,y;
private Texture textur;
public Spieler( int x,int y ) {
this.x = x;
this.y = y;
textur = TextureLoader.loadTexture( "/spieler.png" );
}
public void update( double deltaTime,InputHandler input ) {
}
public void render( SimpleGraphics graphics ) {
graphics.drawTexture( textur,(int)x,(int)y );
}
}
Was jetzt noch fehlt, is der Code in der update-Methode, durch welchen wir den Spieler mit der Tastatur steuerbar machen wollen. Hierzu benötigen wir einen InputHandler
, welchen wir glücklicherweise schon als Argument im Kopf der update-Methode anfordern.
Der InputHandler stellt uns die Methode isKeyDown(int)
zur Verfügung. Sie erwartet als Argument eine Tasten, in Form eines Integers, und gibt true
zurück, wenn diese Taste momentan gedrückt wird. Die Integer-Werte aller Tasten sind in der Keyboard-Klasse gespeichert, wollten wir also abfragen, ob A
gedrückt wird, schreiben wir isKeyDown(Keyboard.A);
.
Dieses Wissen können wir jetzt innerhalb unserer update-Methode anwenden und mit einigen if-Anwendungen den Spieler zum bewegen bringen:
public void update( double deltaTime,InputHandler input ) {
double geschwindigkeit = 50.0 / 60.0; // Geschwindigkeit in Pixeln pro Sekunde
if( input.isKeyDown( Keyboard.A ) )
x -= geschwindigkeit;
if( input.isKeyDown( Keyboard.D ) )
x += geschwindigkeit;
if( input.isKeyDown( Keyboard.W ) )
y -= geschwindigkeit;
if( input.isKeyDown( Keyboard.S ) )
y += geschwindigkeit;
}
Als letztes muss in der Spielsszene einfach nur noch ein Objekt Spieler
erstellt werden und dessen update-, sowie render-Methode in denen der Spielsszene aufzurufen. Die Spielsszene könnte also nun so aussehen (ohne Imports):
public class SpielSzene extends GameScene {
private Spieler spieler;
public SpielSzene( int sceneId ) {
super( sceneId );
spieler = new Spieler( 350,250 );
}
@Override
public void update( double deltaTime,InputHandler input ) {
spieler.update( deltaTime,input );
}
@Override
public void render( SimpleGraphics graphics ) {
spieler.render( graphics );
}
}