Probleme bei Sidescroller

Maxim6394

Bekanntes Mitglied
bei jeder kleinigkeit die ich verändern will treten immer wieder dutzende fehler auf die ich nicht nachvollziehen kann.
ich hab jetzt in dem spiel einen spieler, der sich korrekt bewegen kann, auch mit klettern und kollisionserkennung und springen und fallen etc.
jetzt hab ich eine gegnerklasse eingebaut. der gegner spawnt in der luft wie der spieler und fällt dann runter auf den boden, wie der spieler.
beide stehen dann richtig auf dem boden, so wie es sein sollte. aber wenn ich mit dem spielercharakter springe (yspeed wird ins negative verringert), sinkt der auf dem boden stehende gegner auf einmal in den boden sobald der spieler runterfällt(yspeed wird erhöht).
ich hab überhaupt keine ahnung wieso, es sind 2 voneinander unabhängige objekte.

ich hab hier die funktion um für alle sprite klassen den bewegungszustand zu updaten:
Java:
	public void updateMovement() {
		
		if (climbing) {
			if (canClimb()) {

			} else {
				climbing = false;
				ySpeed = 0;
			updateMovement();
			
			}

		}

		else {
			if (onGround) {
				if (abstandUnten(gravity) > 0) {
					onGround = false;
				
				updateMovement();
				} else {

					ySpeed = 0;
				}
			} else {

				if (abstandUnten(gravity) < 1) {
					onGround = true;
				
				} else {
					if (this.ySpeed < this.gravity) {
						ySpeed += 2;

					}
				}
			}

		}

	}

und hier die methode für die eigentliche bewegung:
Java:
public void move(int x, int y) {

	

		int abstandRechts = abstandRechts();
		int abstandLinks = abstandLinks();
		int abstandUnten = abstandUnten(ySpeed);
		updateMovement();

			 if (ySpeed >= 0) {

					if (abstandUnten >= 0 && onGround==false) {
					this.y+=abstandUnten;
					}

		} 
		if (xSpeed > 0) {

			if (abstandRechts != 0) {
				this.x += abstandRechts; 
			} else {
				xSpeed = 0;
			}

		}

		else if (xSpeed < 0) {

			if (abstandLinks != 0) {

				this.x -= abstandLinks;
			} else {
				xSpeed = 0;
			}
		}

	}
die abstände gehen nur höchstens bis zur geschwindigkeit die sich das objekt pro loop bewegt.
hier zum beispiel abstandunten:
Java:
public int abstandUnten(int moveSpeed) {
		int abstand = 0;

		int limit = 0;
		if (moveSpeed < 0) {
			limit = -moveSpeed;
		} else if (moveSpeed > 0) {
			limit = moveSpeed;
		}

		for (int i = 0; i < limit; i++) {
			Rect bounds = new Rect(x, y + i, x + width, y + height + i);

			if (collision(gameView.sprites, bounds)) {
				break;
			}

			abstand++;
		}

		return abstand - 1;

	}

beim spieler hab ich die move funktion überschrieben, es wird dabei nicht das spielerobjekt selbst bewegt sondern jedes objekt in der gameView arraylist. da ist dann alles drin was im spiel zu sehen ist.

Java:
		else if (ySpeed >= 0) {

			if (abstandUnten > 0) {
				gameView.moveLevel(0, -abstandUnten);
			}

		}
Java:
public void moveLevel(int x, int y) {

		this.x+=x;
		this.y+=y;
		
		for (Sprite s : sprites) {
			
			
				s.x += x;
				s.y += y
			
		}
	}

kann jemand irgendwas falsches erkennen?
 

Maxim6394

Bekanntes Mitglied
ich hab für dieses problem jetzt wohl die lösung gefunden. bei der movelevel funktion hab ich vergessen die bounds zu updaten, das passiert dann erst viel zu spät und der gegner versinkt bisschen im boden wo er dann stecken bleibt.
 

Maxim6394

Bekanntes Mitglied
ich hab jetzt das problem dass ich verschiedene ebenen haben will. einige sachen sollen also vor dem spieler sein, andere dahinter.
ich hab versucht jedem objekt eine layer variable zuzuweisen, momentan von 0 bis 3.
dann beim updaten bin ich erstmal in ner for schleife alle sprites durchgegangen um zu zählen wieviele ebenen es gibt.
danach in einer for schleife die dinger in der richtigen reihenfolge malen. hier der code:
Java:
	int layerCount=0;
	
			for (Sprite s : sprites) {
			
				if(s.layer>layerCount)
				{
					layerCount=s.layer;
				}
				s.onDraw(canvas);
			}
			
			if(player.layer>layerCount)
			{
				layerCount=player.layer;
			}

			
			for(int i=0;i<=layerCount;i++)
			{
				if(player.layer==i)
				{
					player.onDraw(canvas);
				}
				
				for(Sprite s:sprites)
				{
					if(s.layer==i)
					{
						
					
						s.onDraw(canvas);
					}
					
				
				}
			}

das problem ist jetzt, dass einige objekt wohl viel früher dargestellt werden als andere, dadurch heben sich zum beispiel die gegner vom boden ab, wenn sich der spieler grade bewegt.
leider habe ich die ganzen update methoden bei ondraw integriert, also wird bei ondraw auch alles geupdatet. muss ich das darstellen des bildes und das updaten seperat machen oder hat jemand eine andere idee?
 

Fu3L

Top Contributor
Ich würde eine LayerVariable nutzen und die Objekte direkt in einer HashMap<Integer, List<Entities>> speichern. So kannst du die Ebenen nacheinander zeichnen und hast keine Probleme rauszukriegen, wann was gezeichnet werden muss.
 

Maxim6394

Bekanntes Mitglied
ich bin grade dabei meine gameloop zu optimieren, ich schaff es aber nicht dass das spiel immer gleichmäßig läuft. ich kann nicht erkennen ob die koordinaten etc. gleichmäßig geupdatet werden, aber auf jedenfalls wird es ungleichmäßig gemalt.
hier der code:
Java:
public void run() {

		double lastTick=0;
		int TPS=20;
		int MAX_FPS=40;
		double lastDraw=0;
		
		
		while (running) {

			
			double timeNow=System.currentTimeMillis();
			
			if(timeNow-lastTick>=1000/TPS)
			{
				lastTick=System.currentTimeMillis();
				
				view.updateGame();
				
			}
			
		
		
		if(timeNow-lastDraw>=1000/MAX_FPS)
		{
			lastDraw=timeNow;
			drawGame();
		}

}

ich versuche, das game höchstens 20 mal in der sekunde zu updaten, und höchstens 40 mal zu malen.
es ruckelt an manchen stellen ziemlich stark.
irgendwelche verbesserungsvorschläge?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Scaling Probleme Spiele- und Multimedia-Programmierung 6
J Probleme bei Pong Spiele- und Multimedia-Programmierung 9
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
J YoutubeAPI Livestream probleme Spiele- und Multimedia-Programmierung 3
G [LibGDX] Button Klick Probleme Spiele- und Multimedia-Programmierung 1
T Probleme mit JButton Spiele- und Multimedia-Programmierung 5
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
P Probleme mit VLCJ Spiele- und Multimedia-Programmierung 0
F Probleme bei der Soundwiedergabe Spiele- und Multimedia-Programmierung 0
S Probleme bei Breakout - Brick kollision Spiele- und Multimedia-Programmierung 2
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
F BlueJ Ufospiel Probleme Spiele- und Multimedia-Programmierung 1
B Probleme mit AndEngine in Android Spiele- und Multimedia-Programmierung 1
M 2048, 3 kleine Probleme Spiele- und Multimedia-Programmierung 4
A Probleme mit Darstellung von Umgebungen mittels mehrdimensionaler Arrays Spiele- und Multimedia-Programmierung 8
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
J Perfomance Probleme beim eigenen Editor Spiele- und Multimedia-Programmierung 1
K Probleme beim kompilieren von javakara Spiele- und Multimedia-Programmierung 10
Q LWJGL - Alpha-Probleme Spiele- und Multimedia-Programmierung 2
M Point & Click Thread Probleme Spiele- und Multimedia-Programmierung 20
K Probleme mit .jar Spiele- und Multimedia-Programmierung 12
L Probleme beim kompilieren von javakara Spiele- und Multimedia-Programmierung 3
D Probleme mit der Runnable jar Datei Spiele- und Multimedia-Programmierung 3
D Probleme mit objekt initializirung mit Mouselistener Spiele- und Multimedia-Programmierung 10
Black_ixx Hintergrund & Koordinaten Probleme Spiele- und Multimedia-Programmierung 2
B Probleme mit Texturen Spiele- und Multimedia-Programmierung 7
R Probleme mit JPanel!KeyListener geht nicht Spiele- und Multimedia-Programmierung 6
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Maxim6394 [Java3D] Probleme mit KeyFrame Animationen Spiele- und Multimedia-Programmierung 9
T Probleme mit Skysphere in Opengl Spiele- und Multimedia-Programmierung 4
B Probleme mit redraw() Spiele- und Multimedia-Programmierung 3
Gossi Quaxlis 2D Tutorial....Probleme nach hinzufügen der Kollisionsabfrage Spiele- und Multimedia-Programmierung 16
Gossi Probleme beim Laden der Images aus dem "Tutorial für Java-Spiele" Spiele- und Multimedia-Programmierung 4
S Probleme mit Tutorial Spiele- und Multimedia-Programmierung 3
T Probleme mit AffineTransform Spiele- und Multimedia-Programmierung 13
W Probleme mit Mouselook Spiele- und Multimedia-Programmierung 2
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 5
B GameGrid Probleme mit mehrere Actors Spiele- und Multimedia-Programmierung 2
M [Spiel] Kartenspiel Leben und Tod Tips und Probleme Spiele- und Multimedia-Programmierung 7
G [Java3D] Probleme bei Animation Spiele- und Multimedia-Programmierung 4
S Probleme mit JMenu in einem JFrame mit BufferStrategy Spiele- und Multimedia-Programmierung 2
Steev Probleme mit Kameraausrichtung bei ISO-Map Spiele- und Multimedia-Programmierung 3
R MediaPlayer macht Probleme Spiele- und Multimedia-Programmierung 2
N Jogl Probleme mit dem Buffer beim laden einer Textur Spiele- und Multimedia-Programmierung 2
prakdi Probleme mit Quaxlis tutorial Spiele- und Multimedia-Programmierung 5
D Java Pong Probleme Spiele- und Multimedia-Programmierung 7
T Java Sound Probleme Spiele- und Multimedia-Programmierung 8
P probleme mit key event Spiele- und Multimedia-Programmierung 11
T Bekanntes Heli Spiel -> Aber Probleme damit Spiele- und Multimedia-Programmierung 30
S Probleme mit Thread beim Streaming Spiele- und Multimedia-Programmierung 1
O Ampel - Probleme mit der Farbgebung Spiele- und Multimedia-Programmierung 16
F Probleme bei Bewegung Spiele- und Multimedia-Programmierung 7
P Probleme mit Vista und JOGL Spiele- und Multimedia-Programmierung 2
P Probleme mit Wolkenbewegung Spiele- und Multimedia-Programmierung 5
W Probleme mit dem setTextureCoordinate Spiele- und Multimedia-Programmierung 3
D Probleme beim Download von GIF-Bildern Spiele- und Multimedia-Programmierung 4
S Probleme mit dem Licht und dem KeyListener Spiele- und Multimedia-Programmierung 2
L Probleme Bei Pong Programmierung Spiele- und Multimedia-Programmierung 2
D Probleme bei ATI Karten bekannt? Spiele- und Multimedia-Programmierung 4
H Probleme bei Rotation Spiele- und Multimedia-Programmierung 9
X Probleme. Spiele- und Multimedia-Programmierung 2
E Probleme mit Kollisionserkennung ! Spiele- und Multimedia-Programmierung 2
F Probleme mit selbsterstelltem transparenten PNG Spiele- und Multimedia-Programmierung 5
S probleme mit material Spiele- und Multimedia-Programmierung 2
W Probleme beim entfernen von Childs im HauptSceneGraph Spiele- und Multimedia-Programmierung 8
N Pong - noch 2 kleinere Probleme Spiele- und Multimedia-Programmierung 16
M Probleme mit WaveFront-Object - Datei Spiele- und Multimedia-Programmierung 7
B Probleme beim zeichnen Spiele- und Multimedia-Programmierung 15
D Gomoku --- Probleme bei Instanzierung Spiele- und Multimedia-Programmierung 2
G Probleme beim installieren java 3d linux Spiele- und Multimedia-Programmierung 4
G Sound Probleme Spiele- und Multimedia-Programmierung 2
S Probleme mit Canvas! Spiele- und Multimedia-Programmierung 2
S Jump'n'Run: Probleme mit Kollision Spiele- und Multimedia-Programmierung 13
C Probleme mit Java3D (sun.awt.DrawingSurface) in Java 5 Spiele- und Multimedia-Programmierung 10
R Probleme mit Sound in Applikation. HILFE Spiele- und Multimedia-Programmierung 5
N Probleme mit View Spiele- und Multimedia-Programmierung 3
S Sidescroller mit Hindernissen (Qualxi tut) Spiele- und Multimedia-Programmierung 7
Maxim6394 Sidescroller - klettern Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben