Java/Tutorials/Entwicklung eines einfachen Karteneditors III/Kapitel 5

Aus Scientia
Version vom 10. Juli 2009, 16:19 Uhr von DrachenKaiser (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

In diesen Abschnitt Passen wir nun die Engine weiter an.

Als erstes fügen wir in der while-Schleife der Methode run die Variable alterPunkt ein. Dies machen wir, weil wenn später das Objekt nicht passierbar ist, soll der alte Punkt wiederhergestellt werden.

public class SpielSchleife implements Runnable{
 
	SpielFenster fenster;
	Karte karte;
	Steuerung steuerung;
	Point punkt;
	int MAX_GAME_SPEED=33;
 
	public SpielSchleife(SpielFenster f)
	{
		fenster=f;
		karte=fenster.karte;
		steuerung=fenster.steuerung;
		punkt=fenster.ansichtsPunkt;
	}
 
	public void run()
	{
		while(true)
		{
 
			float START = System.currentTimeMillis();
 
			Point alterPunkt = new Point(punkt.x,punkt.y);
			if(steuerung.hoch == true)
			{
				punkt.y--;
			}
			else if(steuerung.runter == true)
			{
				punkt.y++;
			}
			else if(steuerung.links == true)
			{
				punkt.x--;
			}
			else if(steuerung.rechts == true)
			{
				punkt.x++;
			}
 
			if(punkt.x > karte.breite-20)
			{
				punkt.x--;
			}
			else if(punkt.y > karte.höhe-15)
			{
				punkt.y--;
			}
			else if(punkt.x < 0)
			{
				punkt.x++;
			}
			else if(punkt.y < 0)
			{
				punkt.y++;
			}
 
			float AUSFUEHR = System.currentTimeMillis()-START;
			if(MAX_GAME_SPEED>AUSFUEHR)
			{
				try {
					Thread.sleep(MAX_GAME_SPEED-(int)AUSFUEHR);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

Nach den ganzen If-Abfragen. Fragen wir erstmal die SpielerSprite-Klasse ab, wo sich der Held auf den Bildschirm befindet, also fragen wir die Klassenvariable Position ab. Diese Werte rechnen wir auf die Angaben der Klassenvariable punkt. Wir erinnern uns die Variable repräsentiert die linke obere Ecke unseres Anzeige Bereiches. Anschließend, fragen wir die Karten-Klasse nach dem Tile ab, worauf der Held treten möchte. Und schauen in der passmap nach, ob es begehbar oder nicht begehbar ist. Fall es nicht begehbar ist, soll die geänderten X und Y werte von Punkt wieder zurück gesetzt werden, hierfür greifen wir auf den ganz oben erstellten Variable alterPunkt zurück.

public class SpielSchleife implements Runnable{
 
	SpielFenster fenster;
	Karte karte;
	Steuerung steuerung;
	Point punkt;
	int MAX_GAME_SPEED=33;
 
	public SpielSchleife(SpielFenster f)
	{
		fenster=f;
		karte=fenster.karte;
		steuerung=fenster.steuerung;
		punkt=fenster.ansichtsPunkt;
	}
 
	public void run()
	{
		while(true)
		{
 
			float START = System.currentTimeMillis();
 
			Point alterPunkt = new Point(punkt.x,punkt.y);
			if(steuerung.hoch == true)
			{
				punkt.y--;
			}
			else if(steuerung.runter == true)
			{
				punkt.y++;
			}
			else if(steuerung.links == true)
			{
				punkt.x--;
			}
			else if(steuerung.rechts == true)
			{
				punkt.x++;
			}
 
			if(punkt.x > karte.breite-20)
			{
				punkt.x--;
			}
			else if(punkt.y > karte.höhe-15)
			{
				punkt.y--;
			}
			else if(punkt.x < 0)
			{
				punkt.x++;
			}
			else if(punkt.y < 0)
			{
				punkt.y++;
			}
			int spielerX=fenster.spieler.position.x;
			int spielerY=fenster.spieler.position.y;
			int tileID=karte.karte[punkt.x+spielerX][punkt.y+spielerY];
			if(karte.passmap[tileID] == 0)
			{
				punkt.x=alterPunkt.x;
				punkt.y=alterPunkt.y;
			}
			float AUSFUEHR = System.currentTimeMillis()-START;
			if(MAX_GAME_SPEED>AUSFUEHR)
			{
				try {
					Thread.sleep(MAX_GAME_SPEED-(int)AUSFUEHR);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}