# Kollisionsabfrage (Mario klon)



## Guest (10. Sep 2007)

Hallo !

Ich bin gerade dabei einen marioklon zu schreiben, steuerung und feindliche ai hab ich schon, auch einen leveleditor.

Ich habe 5 Klassen : Mario (hauptklasse mit thread), paintcomponente, levelreader, levelone (leveleditor), player und AI.

Ich stehe jetzt aber an  ich weiß nciht wie ich die abfrage realisiere ob unter dem spieler ein element ist. Hier mal das konzept des leveleditor...


```
String row1 = "::::gg:::::::";
String row2 = "::::::::::::::";
String row3 = "::::::::gg:::";
String row4 = ":ggggggg:::";
```

diese variablen werden in der klasse levelone initialisiert und ein array damit erstellt 
	
	
	
	





```
String[] rows = {row1, ...};
```

in der drawLevel methode wird dann gezeichnet :


```
public void drawLevel (Graphics g) {
		
		for (int i = 0; i < def.length; i++) {
			
			for (int j = 0; j < def[i].length(); j++) {
				
				if (def[i].charAt(j) == 'g') {
					
					g.setColor(Color.magenta);
					g.fillRect(j*breite,i*hoehe,breite,hoehe);
					
				}
				
			}
			
		}
		
	}
```


breite und höhe = 20; .. also bei einem g wird ein rechteck gezeichnet mit 20 x 20. X Koordinate ist 20* Index (wo g eben gefunden wird) und die Y koordinate ist 20 * in welche zeilenehöhe g gefunden wurde.


ich hoffe das ist nicht zu verwirrend, ist ein ganz einfacher leveleditor. aber ich komm nicht weiter wie ich der klasse player die daten mitteile wo ein levelelement liegt und wo nicht 

hoffe ihr könnt mir helfen, danke fürs lesen


----------



## SlaterB (10. Sep 2007)

der Player muss doch irgendwo sein, an irgendeinem x,y

daraus ergibt sich ein bestimmtes ArrayElement oder zumindest ein kleiner Block von 4 oder 9 Felder, die nun anschauen


----------



## Gast (10. Sep 2007)

die x und y koordinaten von Player habe ich zur zeit im Konstruktor festgelegt (nur vorrübergehend zum testen) 

ich dachte eher daran, das man es so machen kann, dass die flag fall auf true gesetzt wird sobald kein elemt unter dem spieler ist und die methode fall ausgeführt wird, bis wieder ein element unter ihm ist, oder er aus dem bildschirm verschwindet.

Ich versteh nur nicht wie ich die Informationen an den player am besten übergebe, mit einem Array mit allen Rectangles die im level vorhanden sind ? oder gibts eine besere Lösung  ?


----------



## Marco13 (10. Sep 2007)

Niemand kennt deine genaue Klassenstruktur, und niemand kann dir die "beste" Lösung sagen. Aber grundsätzlich fünde ich es naheligend, wenn die Kollisionserkennung von der Klasse gemacht werden würde, die sowohl das Spielfeld, als auch die Spielfigur kennt.


----------



## Gast (11. Sep 2007)

bei mir wäre das die main klasse, ich wußte nicht ob ich die klasse player die kollisionserkennung machen lassen soll (die klasse level dann mit dem konstruktor übergeben), oder die main (die beide klassen kennt)... 
werde es nun aber auf der main machen.

ich glaub ich hab die lösung bald ^^ ginge aber wahrscheinlich konventioneller  auch


----------



## Quaxli (11. Sep 2007)

Eine Klasse "main" gibt es üblicherweise nicht, sondern eine main-Methode. Sollte das bei Dir so sein, frage ich mich, ob das grundsätzliche Konzept paßt. Ich wundere mich auch, daß Du schon eine AI hast, aber probleme mit der Kollisionserkennung hast....


----------



## Gast (11. Sep 2007)

mit main klasse meine ich die klasse in der die main methode drin ist (die mario klasse). Die ai ist ja noch nicht ganz fertig, ist nur ein objekt das auf der x achse verschoben wird, also ein gif bild. die brauch ich nur damit ich die kollision zwischen ai und player testen kann, problem ist ja nur das ich die kollision zwischen level und player nicht kann.


----------

