Android OpenGL Bewegen

Titanpharao

Bekanntes Mitglied
Halli Hallo,

ich sitze jetzt seit 3 Tagen an der vielleicht "einfachsten" Sache der Welt fest, komme aber wirklich nicht weiter :(

Und zwar soll es mal ein Tower Defense Spiel für da Android werden mit OpenGL ES.

Hier ist meine Klasse "Creep" also der Gegner, der sich durch die Tower bewegen soll.

Code:
package de.liquidtitan.simpletowerdefense.objects;

import android.util.FloatMath;
import android.util.Log;
import de.liquidtitan.simpletowerdefense.game.astar.AStarPathFinder;
import de.liquidtitan.simpletowerdefense.game.astar.Path;
import de.liquidtitan.simpletowerdefense.game.astar.Path.Step;
import de.liquidtitan.simpletowerdefense.game.opengl.basics.GameObject;
import de.liquidtitan.simpletowerdefense.game.opengl.math.Vector2D;
import de.liquidtitan.simpletowerdefense.game.world.World;

public class Creep extends GameObject{

	private final AStarPathFinder finder;
	public final Vector2D velocity=new Vector2D();
	public static final float CREEP_VELOCITY=100f;

	public static final int FINAL_ABS_POSITION_X=8;
	public static final int FINAL_ABS_POSITION_Y=2;

	public Path path=null;

	private int tileX=0;
	private int tileTmpX=0;
	private volatile int tileY=0;
	private volatile int tileTmpY=0;

	public Creep(float x,float y,float width,float height,AStarPathFinder finder){
		super(x,y,width,height);
		this.finder=finder;
	}

	public void setAbsolutePosition(int x,int y){
		tileX=tileTmpX=x;
		tileY=tileTmpY=y;
		path=finder.findPath(tileX,tileY,FINAL_ABS_POSITION_X,FINAL_ABS_POSITION_Y);
		fromPathToVelocity(tileX,tileY);
	}

	public void update(float deltaTime){
		tileX=(int)FloatMath.floor(position.x/World.FIELD_SIZE_X);
		tileY=(int)FloatMath.floor(position.y/World.FIELD_SIZE_Y);
		if(tileX!=tileTmpX||tileY!=tileTmpY){
			tileTmpX=tileX;
			tileTmpY=tileY;
			int x=path.getStep(1).getX();
			int y=path.getStep(1).getY();
			path=finder.findPath(x,y,FINAL_ABS_POSITION_X,FINAL_ABS_POSITION_Y);
			fromPathToVelocity(x,y);
		}
		position.add(velocity.x*deltaTime,velocity.y*deltaTime);
		if(position.x<0)
			position.x=0;
		if(position.y<0)
			position.y=0;
	}

	public void fromPathToVelocity(int absX,int absY){
		if(path!=null){
			Step step=path.getStep(1);
			int stepX=step.getX();
			int stepY=step.getY();
			if(stepX>absX&&stepY==absY){
				velocity.set(CREEP_VELOCITY,0);
			}else if(stepX==absX&&stepY<absY){
				velocity.set(0,-CREEP_VELOCITY);
			}else if(stepX<absX&&stepY==absY){
				velocity.set(-CREEP_VELOCITY,0);
			}else if(stepX==absX&&stepY>absY){
				velocity.set(0,CREEP_VELOCITY);
			}
		}else
			velocity.set(0,0);
	}
}

Es wird eine Position übergeben und anhand dieser das Feld berechnet, wo sich die Figur befindet. Der Wegfindealgorithmus übernimmt Start und End Koordinaten.

Mein Problem ist jetzt, das sich die Figur beim "negativ" Bewegen immer um 1 Feld weniger nach hinten/unten bewegt als sie es sollte.

Ich habe schon unzählige Methoden durch und das ist eine davon. Ich probierte einfach immer wieder das "aktuelle" Feld als Startposition zu übergeben und mich dann weiter durchzuhangeln. Selbe ergebniss wie oben, es fehlt IMMER ein Feld.... habt ihr eine Ahnung, oder sowas schonmal gemacht :( ich wäre 1000 mal dankbar.

Eine andere Frage wäre, das ist ja Frameindependent Movement. Aber wie schaffe ich es jetzt, das sich die Figur auch wirklich auf dem "Feld" bewegt und nicht ein paar Pixel weiter link/rechts oder wo anders daneben befindet? Man merkt da besonders, wenn das Spiel ruckelt und die "Sprünge"/Frame besonders groß werden.

Mfg
Oliver
 

Fu3L

Top Contributor
Bist du sicher, dass wir es ohne die Klasse PathFinder lösen können?^^

Hast du denn einen vorgeschriebenen Weg für die Kreaturen oder können diese sich frei bewegen?

PS: Der Titel ist im Übrigen nicht besonders günstig... Wer keine Ahnung von Android hat (so wie ich), wird nicht unbedingt reinsehen und es hat ja wahrscheinlich GAR nichts mit Android zu tun^^
 

HimBromBeere

Top Contributor
Zu dem Problem mit der Framerate lässt sich eine einfache Lösung finden: du musst die Bewegung deiner Objekte (bei dir die Gegner) an deine aktuelle Framerate anpassen. Das bedeutet, dass du messen musst, wie lange ein Schleifendurchlauf deiner Spielschleife dauert. Jetzt musst du halt die Veränderung der x/x-Koordinaten der Gegner an diese Zeit anpassen (du kennst ja das gute alte
Code:
v = s / t
bzw.
Code:
s = v * t
)...
 

Titanpharao

Bekanntes Mitglied
Hallo Fu3L,

ja danke für den Hinweis mit dem Themen Namen, kann ich wohl leider nicht mehr ändern. (Wollte auch den Quellcode nochmal etwas aufräumen, nachhinein editieren geht wohl nicht?)

Die Klasse AStarPathFinder findet man im Internet :p

AStarPathFinder (Slick - The 2D Library)

Sie liefert einfach nur einen Pfad zurück, der eine ArrayListe mit Wegpunkten enthält.
Wobei StartX,StartY,EndX,EndY als Parameter in Form eines Integers übergeben werden.

Äh die Figuren können sich frei bewegen. Sie werden halt von den Towern geblockt und der AStarPathFinder findet mir den Weg ;)

Oder hat jemand mal ein Beispiel wie man das mit OpenGL macht? In dem Buch was ich habe, steht nur "freie" Bewegung drin, keine wie man Units direkt auf Tiles bewegt. Möglichst so, das sie sich exakt in der Mitte aufhalten bzw das rückwärstlaufen Problem.
 

Titanpharao

Bekanntes Mitglied
Habs jetzt erstmal so hinbekommen, nicht schön, aber besser als nichts.

Code:
public class Creep extends GameObject{

	private final AStarPathFinder finder;
	public final Vector2D velocity=new Vector2D();
	public static final float CREEP_VELOCITY=100f;
	public static final int FINAL_ABS_POSITION_X=8;
	public static final int FINAL_ABS_POSITION_Y=2;
	public Path path=null;
	float moveDistance=0;

	public Creep(float x,float y,float width,float height,AStarPathFinder finder){
		super(x,y,width,height);
		this.finder=finder;
	}

	public void setAbsolutePosition(int x,int y){
		path=finder.findPath(x,y,FINAL_ABS_POSITION_X,FINAL_ABS_POSITION_Y);
		fromPathToVelocity(0);
	}

	public void update(float deltaTime){
		moveDistance=moveDistance+deltaTime*CREEP_VELOCITY;
		fromPathToVelocity((int)(moveDistance/96));
		position.add(velocity.x*deltaTime,velocity.y*deltaTime);
		if(position.x<0)
			position.x=0;
		if(position.y<0)
			position.y=0;
	}

	public void fromPathToVelocity(int stepCount){
		if(path!=null){
			Step step=path.getStep(stepCount);
			int absX=step.getX();
			int absY=step.getY();
			step=path.getStep(++stepCount);
			int stepX=step.getX();
			int stepY=step.getY();
			if(stepX>absX&&stepY==absY){
				velocity.set(CREEP_VELOCITY,0);
			}else if(stepX==absX&&stepY<absY){
				velocity.set(0,-CREEP_VELOCITY);
			}else if(stepX<absX&&stepY==absY){
				velocity.set(-CREEP_VELOCITY,0);
			}else if(stepX==absX&&stepY>absY){
				velocity.set(0,CREEP_VELOCITY);
			}
		}else
			velocity.set(0,0);
	}
}
 

HimBromBeere

Top Contributor
Wenn ich das richtig in Erinnerung hab, leifert A* doch immer den kürzesten Weg zwischen zwei Knoten zurück? Ist das der Sinn bei deinem Spiel? Bei den TowerDefense-Spielen, die ich kenne, werden die Laufwege immer zufällig ausgewählt (natürlich nur nicht zurück^^), das muss aber nicht zwingend der kürzeste sein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T opengl und Android.... Spiele- und Multimedia-Programmierung 3
K Android: OpenGL render performance Tipps ? Spiele- und Multimedia-Programmierung 4
M Android Studio - Hintergrundmusik Spiele- und Multimedia-Programmierung 3
Excess Ballerfisch für Android Spiele- und Multimedia-Programmierung 3
T Welche packages aus der java api doku ist hilfreich zur Android Spieleprogrammierung Spiele- und Multimedia-Programmierung 2
L LibGDX - Verschiedene Layouts bei Android / Desktop Spiele- und Multimedia-Programmierung 1
K Android Spiel Programmieren Spiele- und Multimedia-Programmierung 6
T Android-App-Programmierung? Spiele- und Multimedia-Programmierung 3
dummycoders Android Studio - Button ändert Farbe erst nach Delay? Spiele- und Multimedia-Programmierung 5
T Android App Spiele- und Multimedia-Programmierung 2
T Android App Absturz beim Starten Spiele- und Multimedia-Programmierung 41
Flo. android java tastatureingaben abfangen. Spiele- und Multimedia-Programmierung 1
B Probleme mit AndEngine in Android Spiele- und Multimedia-Programmierung 1
T Android Spielvorstellung / Beta Tester gesucht Spiele- und Multimedia-Programmierung 5
K [Spielvorstellung] - Spoony Fish - (Android) Spiele- und Multimedia-Programmierung 3
P Mein Android Game Spiele- und Multimedia-Programmierung 3
X Android Slick AE Anmation Spiele- und Multimedia-Programmierung 2
X Android Slick AE Image Pfad Spiele- und Multimedia-Programmierung 3
X Slick in Android Apps einsetzten Spiele- und Multimedia-Programmierung 6
K [Spielevorstellung] - Range Racer - (Android) Spiele- und Multimedia-Programmierung 35
A Music für Android game Spiele- und Multimedia-Programmierung 3
K Video-Streaming / Android Spiele- und Multimedia-Programmierung 3
Guybrush Threepwood Erfahrungsbericht Android Market Spiele- und Multimedia-Programmierung 11
temi OpenGL: Eine Kugel Spiele- und Multimedia-Programmierung 7
P Audio Visualizer mit OpenGL in Java? Spiele- und Multimedia-Programmierung 4
Z Vlcj in OpenGL Spiele- und Multimedia-Programmierung 4
coolian opengl von scale in breite und höhe konvertieren Spiele- und Multimedia-Programmierung 23
F OpenGL (LWJGL) Shader Programmierung GLSL Spiele- und Multimedia-Programmierung 2
K Messdaten in Echtzeit darstellen in OpenGL Spiele- und Multimedia-Programmierung 4
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
B LWJGL OpenGL SIGSEGV auf Linux (Verzweiflung :/) Spiele- und Multimedia-Programmierung 8
KeexZDeveoper Fehler von OpenGL Spiele- und Multimedia-Programmierung 1
Kim_Dotcom libGDX - opengl Fehler Spiele- und Multimedia-Programmierung 5
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
RalleYTN OpenGL Context im JFrame? Spiele- und Multimedia-Programmierung 0
L OpenGL TransformationMatrix eines Flugzeugs Spiele- und Multimedia-Programmierung 2
F OpenGL - Transparenz mit Depth Peeling Spiele- und Multimedia-Programmierung 0
turing OpenGL / Jogle Code Reveiw zur Performance Verbesserung Spiele- und Multimedia-Programmierung 1
K LibGdx, Loadingscreen & Opengl context Spiele- und Multimedia-Programmierung 3
turing OpenGL VBO and Unfiform Handling Spiele- und Multimedia-Programmierung 1
B LWJGL / OPENGL Kriege Depth-Test nicht hin :( Spiele- und Multimedia-Programmierung 0
D [OpenGL] Spiel in der Art von Age of Empires Spiele- und Multimedia-Programmierung 4
R LWJGL: OpenGL Fehler - weitere Informationen auslesen möglich? Spiele- und Multimedia-Programmierung 2
T Welche OpenGL-Version soll ich verwenden? Spiele- und Multimedia-Programmierung 2
O OpenGL - Texture falsch herum Spiele- und Multimedia-Programmierung 3
Gregorrr OpenGL & RCP/SWT Spiele- und Multimedia-Programmierung 3
P LWJGL oder OpenGL (C++) Spiele- und Multimedia-Programmierung 7
lumo opengl, sprites/tiles Spiele- und Multimedia-Programmierung 8
M OpenGL: Rectangle dort erstellen wo ich hintippe Spiele- und Multimedia-Programmierung 2
U OpenGl 1.1 (LWJGL GL11.*) und weiter? Spiele- und Multimedia-Programmierung 7
CookieSoft OpenGl Translatef Frage Spiele- und Multimedia-Programmierung 2
V Keine Ahnung von OpenGL! Hilfe wäre lieb! Spiele- und Multimedia-Programmierung 8
T 3D Stadtmodell mit OpenGL Spiele- und Multimedia-Programmierung 5
TheWhiteShadow OpenGL glDrawArrays Bufferfehler Spiele- und Multimedia-Programmierung 10
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
S OpenGL Textur unsauber Spiele- und Multimedia-Programmierung 2
T OpenGL ES verschwindene Vertices Spiele- und Multimedia-Programmierung 2
R OpenGL Textur mit verschiedenen bit depths Spiele- und Multimedia-Programmierung 6
Helgon OpenGL Blend Frage Spiele- und Multimedia-Programmierung 18
A LWJGL/OpenGL und Text Spiele- und Multimedia-Programmierung 8
Helgon OpenGL vernünftige Tutorial? Spiele- und Multimedia-Programmierung 22
A OpenGL Textur und nicht Textur Spiele- und Multimedia-Programmierung 2
T Jmonkey opengl problem Spiele- und Multimedia-Programmierung 13
T Probleme mit Skysphere in Opengl Spiele- und Multimedia-Programmierung 4
M Problem mit Kamera (glMultMatrix (OpenGL/ LWJGL)/ Quaternionen) Spiele- und Multimedia-Programmierung 5
F Suche Tutorial zu "purem" OpenGL mit Java Spiele- und Multimedia-Programmierung 10
Kr0e OpenGL + glSubTexImage2D -> Bufferproblem Spiele- und Multimedia-Programmierung 3
F OpenGL Screenshot in iMove (als Greenscreen) => Farben invertiert? Spiele- und Multimedia-Programmierung 16
I Vergleich von Java3D und OpenGL Spiele- und Multimedia-Programmierung 17
F Mac: OpenGL Desktop-Screen aus Grafikkarte lesen Spiele- und Multimedia-Programmierung 2
F OpenGL 2D MouseClick/MouseMove Listener Spiele- und Multimedia-Programmierung 4
Kr0e Sehr schnelle Texturupdates (OpenGL) Spiele- und Multimedia-Programmierung 3
Kr0e OpenGL beliebige Texturgröße Spiele- und Multimedia-Programmierung 2
BattleMaster246 OpenGL - Transparenz Spiele- und Multimedia-Programmierung 10
Kr0e OpenGL .. Pixel Buffer Objekt oder Frame Buffer Object? Spiele- und Multimedia-Programmierung 2
Y JOGL / OPENGL in Frame Spiele- und Multimedia-Programmierung 11
A Problem openGL-Pipeline mit Win7? Spiele- und Multimedia-Programmierung 6
G OpenGL boolesche operation auf Rechtecke Spiele- und Multimedia-Programmierung 15
A JOGL / OpenGL Spiele- und Multimedia-Programmierung 7
G API für 3d-Programmierung? OpenGL? Spiele- und Multimedia-Programmierung 12
J OpenGL (JOGL) - Radial Blur Effekt (Glow) Spiele- und Multimedia-Programmierung 2
J Opengl Texture laden Null Pointer Exception Spiele- und Multimedia-Programmierung 6
J netbeans opengl keyPressed(KeyEvent evt) benutzen Spiele- und Multimedia-Programmierung 4
J netbeans opengl gluPerspective und gluLookAt Verständnis Spiele- und Multimedia-Programmierung 13
S glTexSubImage2D()-Fragen(Zerstörbares Terrain, OpenGL) Spiele- und Multimedia-Programmierung 3
Z Suche Tutorial zum Einstieg in OpenGl mit Java (JOGL) Spiele- und Multimedia-Programmierung 2
T Overlay in anderer OpenGL Anwendung Spiele- und Multimedia-Programmierung 4
egrath Vista OpenGL Performance Problem? Spiele- und Multimedia-Programmierung 3
Y OpenGL Spiele- und Multimedia-Programmierung 5
J opengl beispiele? Spiele- und Multimedia-Programmierung 10
D Java mit OpenGL - besser LWJGL oder JOGL? Spiele- und Multimedia-Programmierung 6
N OpenGL und DirectX - was genau ist das? Spiele- und Multimedia-Programmierung 5
C OpenGl Support für Applet (sun.java2d.opengl=True) Spiele- und Multimedia-Programmierung 3
B OpenGL oder Direct X Spiele- und Multimedia-Programmierung 9
Z Schach Figuren bewegen Spiele- und Multimedia-Programmierung 4
B Spieler auf besonderer Bahn bewegen Spiele- und Multimedia-Programmierung 1
M Minecraft Spieler move/run (bewegen) Spiele- und Multimedia-Programmierung 0
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
G Auf einem Stick bewegen Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben