# collision mit images und pixelgrabber



## DarKestSun (12. Mai 2005)

wiedermal ein jumpn run problem...

mein spiel läuft jetz mal einigermaßen, netzwerk is eingebaut und eigentlich gehts in den endspurt.

ein problem hab ich allerdings noch:
ich arbeite mit einem pixelGrabber der sich die einzelnen pixel der map holt, mit denen ich die collision steuere.
dazu benutze ich ein 2dimensionale array [x][y]

wer den pixelgrabber kennt, weiß, dass er ein 1dimensionales array braucht, nämlich [x*y]. bei einer 2000*600 pixel großen map hört der spaß aber auf, weil das array nich so viel speichern kann.

ich dachte, ich lege für eine 6000*600 pixel map 3 wie oben genannte arrays an und speichere sie in einem vector. allerdings scheint das nicht zu funzen.

wenn wer bessere ideen oder eine lösung für mein problem hat, bitte posten. 
ich beantworte alle fragen und bin für jede antwort dankbar!!!


----------



## Hansdampf (13. Mai 2005)

kannst du nicht einfach sowas machen:

```
int[][]map=new int[6000][600]

updatemap(){

for(int i=0;i<3;i++){
int xpos=i*2000;
int[][] gibsmir=grabpixel_von(image,xpos,0,xpos+2000,600);

for(y<600)
for(x<2000)
map[x+xpos][y]=gibsmir[x][y]; 
}
}
```

versteh ich was falsch?


----------



## Guest (16. Mai 2005)

die frage war eher obs nich was besseres gibt, das mit 3 arrays im speicher is nämlich schlecht wenn die map groß is


----------



## Hansdampf (16. Mai 2005)

wieso brauchst du 3 Arrays und warum ist das schlecht wenn die Map groß ist?
 :bahnhof:


----------



## Ausserirdischer (17. Mai 2005)

Berechnest Du die Kollisionen anhand der Pixel? Oder verstehe ich da was falsch?


----------



## Guest (18. Mai 2005)

ab einer bestimmten größe der map (2400 pixel in der breite) wird das array zu klein, der heap wird voll
aber nur weil der pixelgrabber ein array mit [width*height] - göße braucht, also 2400*600

splitte ich nun ein großes array (z.b 6000 pixel) auf 3 arrays mit 2000 pixel auf, dann funzt alles wieder
weil das pixelgrabber-array für jetz nur 2000*600 groß is, nach dem grabben wird es eh gelöscht und der heap wird wieder frei.

die frage is jetz ob es nich was besseres gäbe als dieses system, die collision arbeitet mit jedem pixel der map, is also sehr genau und daher leider auch aufwändig


----------



## Hansdampf (18. Mai 2005)

1) mehr Speicher reservieren?  -Xmx200m
2) den Code von mir oben ausprobiert?  der liefert doch ein einziges Array und verlang vom Pixelgrapper nur kleinre Happen
3) statt Pixelgrabber BufferedImage benutzen und sich daraus die int[]s holen.

versteh das mit dem Speicherproblem nicht, ich hab spaßeshalber schon int[5000*5000] als Map gemacht (aber dann mit -xmx)


----------



## Guest (19. Mai 2005)

:shock: 
ja supa als anfänger is man mal wieda der dumme

hab gar net gewusst das ma da mehr platz im heap (oda stack oda sunst was) reservieren kann
des is natürlich praktisch


----------



## Reality (19. Mai 2005)

Eigentlich gibt es da eine super einfache Möglichkeit, die Java schon mitliefert:

Die Klasse Rectangle bietet da die Methode intersects.

Liebe Grüße
Reality


----------



## heisser Tipp (19. Mai 2005)

Reality hat gesagt.:
			
		

> Eigentlich gibt es da eine super einfache Möglichkeit, die Java schon mitliefert:
> 
> Die Klasse Rectangle bietet da die Methode intersects.
> 
> ...


Genau! Nimm jedes Pixel, und lege ein Rectangle drumrum. Dann kannst Du mit intersects() auf Kollisionen prüfen. :roll:


----------



## Reality (19. Mai 2005)

Du hast gar nichts verstanden.


----------



## SBehnen27 (1. Jun 2005)

Reality hat gesagt.:
			
		

> Eigentlich gibt es da eine super einfache Möglichkeit, die Java schon mitliefert:
> 
> Die Klasse Rectangle bietet da die Methode intersects.
> 
> ...



das interessiert mich aber jetzt mal 
kannst du da vll. ein zwei sätze zu sagen?

ich hätte da nämlich ggf. ne anwendung für.
brauche ne vernünftige kolli abfrage von 2 flugzeugen. 
das sind halt 60x60 grosse bilder mit transparentem HG und in der mitte is ein flieger drauf...

isses möglich mit dem intersects nur auf die gemalten bereiche zu reagieren und die transparenten stellen zu ignorieren?


----------



## Reality (1. Jun 2005)

SBehnen27 hat gesagt.:
			
		

> isses möglich mit dem intersects nur auf die gemalten bereiche zu reagieren und die transparenten stellen zu ignorieren?


Nein, leider nicht. Rectangle ist ja ein Rechteck das schließt alles ein.

LG
Reality


----------

