pixelgenaue Kollision

baddestpoet

Mitglied
Ich versuche die pixelgenaue Kollision aus Quaxlis Tutorial in meinen Spielprototypen zu implementieren, aber bekomme immer folgende Fehlermeldung wenn mal eine Kollision auftritt:

Exception in thread "Thread-2" java.awt.image.RasterFormatException: (x + width) is outside of Raster
at sun.awt.image.BytePackedRaster.createWritableChild(BytePackedRaster.java:1306)
at java.awt.image.BufferedImage.getSubimage(BufferedImage.java:1173)
at Sprite.checkCollision(Sprite.java:78)
at GamePanel.doLogic(GamePanel.java:158)
at GamePanel.run(GamePanel.java:92)
at java.lang.Thread.run(Thread.java:636)


Hat jemand ne Ahnung, woher das kommt? Hier meine Kollisionsmethode und deren Aufruf im GamePanel (da wird für abgegebene Schüsse gecheckt, ob sie mit einem Gegner kollidieren):

Java:
    public boolean checkCollision(Sprite s) { //pixelgenaue Kollision
    	Rectangle2D.Double cut = (Double) this.createIntersection(s); //Schnittmenge der Sprites
    	
    	if(cut.width<1 || cut.height<1)
    		return false; //Prüfung ob wirklich verwertbare Menge kollidiert
    	
    	//Rechteck in Bezug auf die jeweiligen Images
    	Rectangle2D.Double sub_me = getSubRec(this,cut);
    	Rectangle2D.Double sub_him = getSubRec(s,cut);
    	
    	//geschnittene Bestandteile der Sprites
    	BufferedImage img_me = pics[currentpic].getSubimage((int) sub_me.x, (int) sub_me.y, (int) sub_me.width, (int) sub_me.height);
    	BufferedImage img_him = pics[currentpic].getSubimage((int) sub_him.x, (int) sub_him.y, (int) sub_him.width, (int) sub_him.height);
    	
    	for(int i=0;i<img_me.getWidth();i++) {
    		for (int j=0;j<img_him.getHeight();j++) {
    			int rgb1 = img_me.getRGB(i,j);
    			int rgb2 = img_him.getRGB(i,j);
    			
    			if(!isOpaque(rgb1) && !isOpaque(rgb2))
    				return true; //wenn ein Pixel gefunden wurde, der auf beiden Teilbildern nicht transparent ist
    		}
    	}
    	return false;
    }

Java:
        for(Sprite token:shots) {
        	token.doLogic(delta);
        	for (Sprite sprite:enemies) {
        		if(sprite.checkCollision(token)) {
        			token.setRemove();
        			sprite.setRemove();
        		}
        	}
        }
 

Hansdampf

Bekanntes Mitglied
Du musst über min(img_me.width,img_him.width) und min(img_me.height,img_him.height) loopen.
Oder so ähnlich, auf jeden Fall liegt hier der Fehler.

edit: Ich glaube, ich habe teilweise Blödsinn geschrieben.
 
Zuletzt bearbeitet:

Quaxli

Top Contributor
Das kann man an der Ecke nicht genau sagen, da wirst Du wohl ein bißchen debuggen müssen.
Was mir aber aufgefallen ist:

Java:
        BufferedImage img_me = pics[currentpic].getSubimage((int) sub_me.x, (int) sub_me.y, (int) sub_me.width, (int) sub_me.height);
        BufferedImage img_him = pics[currentpic].getSubimage((int) sub_him.x, (int) sub_him.y, (int) sub_him.width, (int) sub_him.height);

Du liest für das aktuelle Sprite und den "Kollisions-Gegner" beides mal das Bild des aktuellen Sprites aus. Solange das bei beiden gleich ist, hast Du an der Ecke vielleicht kein Problem, grundsätzlich ist das aber falsch.
Ich könnte mir aber vorstellen, daß das sogar die Ursache für Deinen Fehler ist?
 

baddestpoet

Mitglied
Oh ja, das hab ich übersehen. Aber ich bekomm immer noch die gleiche Fehlermeldung.

@Hansdampf: die Dimensionen der Schnittmenge müssten doch von beiden Teilbildern gleich sein, da macht es glaub ich keinen Unterschied ob ich img_me oder img_him nehme.

Der Fehler tritt übrigens schon in der Zeile
Java:
BufferedImage img_me = pics[currentpic].getSubimage((int) sub_me.x, (int) sub_me.y, (int) sub_me.width, (int) sub_me.height);
auf, da kommt die Schleife ja noch gar nicht zum Tragen...
 

Steev

Bekanntes Mitglied
Normalerweise müsste einer der Sub-Image-Werte auserhalb des Rasters des Bildes sein, von dem du das Sub-Image erzeugen willst.
Lass dir doch mal die Bounds von dem pics[currntpic] sowie sub_me.x, y, width und height ausgeben. Irgendwas stimmt da nicht...

Gruß
Steev
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Pixelgenaue Kollision Spiele- und Multimedia-Programmierung 5
D Pixelgenaue Kollisionsdetektion Spiele- und Multimedia-Programmierung 3
masta // thomas Kollisionsabfrage - inspiriert durch "pixelgenaue Kolli Spiele- und Multimedia-Programmierung 13
gieser pixelgenaue Kollisionsabfrage der Kreise Spiele- und Multimedia-Programmierung 9
B Kollision Spiele- und Multimedia-Programmierung 5
A Kollision funktioniert nicht richtig bei zu schneller Geschwindigkeit des Spielers Spiele- und Multimedia-Programmierung 0
N Kollision von zwei ImageIcons Spiele- und Multimedia-Programmierung 8
D Kollision funktioniert unten aber nicht oben Spiele- und Multimedia-Programmierung 4
J Kollision (libgdx) Spiele- und Multimedia-Programmierung 2
S Kollision Spiele- und Multimedia-Programmierung 2
J Kollision genau erkennen mit intersects Spiele- und Multimedia-Programmierung 27
K a* kollision der einheiten Spiele- und Multimedia-Programmierung 3
S Probleme bei Breakout - Brick kollision Spiele- und Multimedia-Programmierung 2
F Rechteck Kollision Spiele- und Multimedia-Programmierung 10
H 2- D Kollision Spiele- und Multimedia-Programmierung 14
C Zeldaklon Problem mit Wand-Kollision Spiele- und Multimedia-Programmierung 8
O Kollision Polygon und Rechteck Spiele- und Multimedia-Programmierung 2
S Pacman Kollision von Münzen und Mauern Spiele- und Multimedia-Programmierung 11
P Gridpane Kollision Spiele- und Multimedia-Programmierung 3
Androbin Kollision zwischen Raster und Nicht-Raster Spiele- und Multimedia-Programmierung 2
L Kollision soll nur an oberer Seite (Breite) möglich sein Spiele- und Multimedia-Programmierung 6
Hercules Kisten Kollision Spiele- und Multimedia-Programmierung 2
S 3D-Kollision mit zwei ArrayLists Spiele- und Multimedia-Programmierung 7
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
S Kollision tile-based 2D Plattformer Spiele- und Multimedia-Programmierung 2
D Greenfoot Kollision Spiele- und Multimedia-Programmierung 5
D Kollision verhindern Spiele- und Multimedia-Programmierung 2
R Frage zur Kollision Spiele- und Multimedia-Programmierung 5
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Kr0e Kollision zweier Kugeln... Wo ist Newton ?? Spiele- und Multimedia-Programmierung 9
C Kollision zwischen 2 Kreisen Spiele- und Multimedia-Programmierung 3
Helgon Kollision von jeder Seite des Blocks Spiele- und Multimedia-Programmierung 3
Fab1 Kollision die 100ste Spiele- und Multimedia-Programmierung 5
D Jump'n'run Kollision bei Blöcken Spiele- und Multimedia-Programmierung 10
P PingPong Spiel - Kollision Spiele- und Multimedia-Programmierung 2
C Bitmaske und Kollision Spiele- und Multimedia-Programmierung 2
J Spielprogrammierung mit bewegung und kollision Spiele- und Multimedia-Programmierung 24
S Kollision Kreis Rechteck Spiele- und Multimedia-Programmierung 8
aze Java3D: Gegenstände aufeinander zubewegen ohne Kollision Spiele- und Multimedia-Programmierung 4
S Kollision in 2D Spiele- und Multimedia-Programmierung 12
B Gedrehte Rechtecke Kollision Spiele- und Multimedia-Programmierung 4
J Kollision mit Block (Wand) Spiele- und Multimedia-Programmierung 11
C Kollision in Java3D Spiele- und Multimedia-Programmierung 4
J Kollision von Objekten Spiele- und Multimedia-Programmierung 7
M Asteroids Clone: Kollision zwischen Schuss und Feind Spiele- und Multimedia-Programmierung 13
F Bewegung/Kollision von Objekten auf Tastendruck Spiele- und Multimedia-Programmierung 6
Z Kollision Spiele- und Multimedia-Programmierung 3
F Kollision für Arkanoid Spiele- und Multimedia-Programmierung 2
N Kollision abfragen Spiele- und Multimedia-Programmierung 3
K Sprites / Kollision Spiele- und Multimedia-Programmierung 3
S Jump'n'Run: Probleme mit Kollision Spiele- und Multimedia-Programmierung 13

Ähnliche Java Themen

Neue Themen


Oben