# Kollision zwischen Raster und Nicht-Raster



## Androbin (24. Mai 2014)

Hallo Leute,
ich habe hier ein Problem *8*

Ich habe einen 2-dimensionalen Array,
sowie einen nicht daran gebundenen Spieler,
möchte jedoch die Kollision überprüfen.

Das Problem besteht darin, dass ich nicht
alle Slots des Array's prüfen möchte / kann,
sondern nur die umliegenden.

Hier kommt ihr in's Spiel *8*

Wer kann mir sagen, wie ich alle umliegenden Felder
meines nicht mit dem Spieler verknüpften Array's prüfen kann ???

PS. Die Elemente des Array's und der Spieler sind von der Klasse "Rectangle" abgeleitet !!!


----------



## Gucky (24. Mai 2014)

Mit 
	
	
	
	





```
int yRast = (yPosSpieler - abstandVonOben) / höheRasterFeld;
```
 müsstest du die Zeile rausbekommen, in der der behandelte Spieler sich befindet.
Dasselbe funltioniert auch für die X-Koordinate im Raster.


----------



## Androbin (25. Mai 2014)

: Gucky *8*
Schon klar, das Problem [STRIKE]ist[/STRIKE] war,
dass ich mit noch ein paar weiteren Faktoren zu rechnen [STRIKE]habe[/STRIKE] hatte.

[EDIT]



Spoiler: Hier meine Lösung 8





```
public void move( char dir ) {
		
		switch ( dir ) {
			
			case 'U' :
				
				if ( !canJump )
					 return;
				
				Block u = World.world.get( new Point( x / (int) ( 0.5 * getHeight() ), y / (int) ( 0.5 * getHeight() ) - 1 ) );
				
				if ( u.getId() != 0 )
					 return;
				
				canJump = false;
				
				y -= 0.5 * getHeight();
				
				break;
				
			case 'L' :
				
				Block l1 = World.world.get( new Point( x / (int) ( 0.5 * getHeight() ), y / (int) ( 0.5 * getHeight() )     ) );
				Block l2 = World.world.get( new Point( x / (int) ( 0.5 * getHeight() ), y / (int) ( 0.5 * getHeight() ) - 1 ) );
				
				if ( l1.getId() != 0
				  || l2.getId() != 0 )
					 return;
				
				x  -= 4;
				
				pic = 0;
				
				break;
				
			case 'D' :
				
				Block d = World.world.get( new Point( x / (int) ( 0.5 * getHeight() ), y / (int) ( 0.5 * getHeight() ) + 2 ) );
				
				if ( d.getId() != 0 ) {
					
					canJump = true;
					return;
					
				}
				
				y += 4;
				
				break;
				
			case 'R' :
				
				Block r1 = World.world.get( new Point( x / (int) ( 0.5 * getHeight() ) + 1, y / (int) ( 0.5 * getHeight() )     ) );
				Block r2 = World.world.get( new Point( x / (int) ( 0.5 * getHeight() ) + 1, y / (int) ( 0.5 * getHeight() ) - 1 ) );
				
				if ( r1.getId() != 0
				  || r2.getId() != 0 )
					 return;
				
				x += 4;
				
				pic = 2;
				
				break;
				
		}
		
		scroll();
		
	}
```



[/EDIT]


----------

