# Kollision tile-based 2D Plattformer



## shishigami (9. Aug 2012)

Hallo,

ich möchte zur Übung versuchen einen Platformer zu programmieren, dazu nutze ich Slick.

Hänge gerade daran, den Spieler auf tiles stehen zu lassen. Meine erste Idee :
Textdatei mit 0en und 1en (1 = Kollision), die in einer dafür zuständigen Klasse eingelesen wird und diese Werte dann für folgende Methode nutzt


```
public boolean isCollision(float x, float y);
```
___________________________________________________

Ich scheitere daran die Werte über 


```
private void readCollisionData(String fileLocation) throws IOException;
```

einzulesen und in das Array 


```
private boolean[][] collisionData = new boolean[MAP_SIZE][MAP_SIZE];
```

an entsprechender Position einzufügen.



Falls ihr andere Methoden kennt, um das umzusetzen, würde mich das auch interessieren (Tiled setze ich bewusst nicht ein)

mfg


----------



## Fu3L (9. Aug 2012)

Nutze java.util.Scanner und lies jede Zeile einzeln ein. Dann gehst du die Zeichen der Zeile durch und wenn du eine 1 vorfindest, füllst du in dein Array ein true. Eine Zeile in der Textdatei entspricht natürlich einer Zeile im Array.

Sollte es damit nicht klappen, zeige doch bitte deine Versuche, damit man daran sehen kann, wo es hakt.


----------



## shishigami (9. Aug 2012)

Hallo Fu3L,


```
private void readCollisionData(String fileLocation) throws IOException {
		Scanner scanner = new Scanner(new File(fileLocation));
		int y = 0;
		
		while (scanner.hasNextLine()) {
			String line = scanner.nextLine();
			
			for (int x = 0; x < MAP_SIZE; x++) {
				collisionData[x][y] = line.charAt(x);
			}
			
			y++;  // Scheint mir unschön, gibt es hier eine alternative?
		}
		
		printCollisionData();  // Testweise ausgeben
	}

	private void printCollisionData() {
		for (int x = 0; x < MAP_SIZE; x++) {
			for (int y = 0; y < MAP_SIZE; y++) {
				System.out.print(collisionData[x][y]);
			}
			System.out.println();
		}
	}
```

Hier die Ausgabe :


```
1111111111111111
0000001000000001
0000001000000011
0000001000000111
0000001000001111
0000001000011111
0000001000010001
0000001000010001
0000001000010001
0000000000010001
0000000000010001
0000001000010001
0000001000000001
0000001000000011
0000001100000111
1111111111111111
```

Und das Original aus der Textdatei :


```
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1000000000000001
1111111110011111
1000000000000011
1000000000000001
1000000000000001
1000000000000001
1000011111110001
1000110000000001
1001110000000011
1011110000000111
1111111111111111
```

[STRIKE]Was mache ich falsch?[/STRIKE]

Danke für deine Hilfe. Habe mal x und y vertauscht..

mfg


----------

