2012-04-14 15 views
0

Ich spiele mit der Slick 2d Java Game Engine herum. Ich versuche, eine Renderlogik zu schreiben, wo, wenn ein Kreis innerhalb eines Quadrats ist, er grün gefärbt ist. Ansonsten ist es rot gefärbt. Sie können sehen, was ich in diesem Bild zu erreichen versuchen:Slick2d Form enthält eine andere Form

Mein Problem ist, dass, wenn ich Slick2d des Shape.contains(Shape) Methode verwenden, es gibt immer false zurück, unabhängig davon, ob den Kreis im Quadrat ist. Immer wenn ich die Java AWT Rectangle.contains(Rectangle) Methode verwende, wird True korrekt zurückgegeben.

Hier ist einige (Quatsch) Code, den ich benutze. Ich speichere Koordinaten als Floats, wenn das einen Unterschied macht (daher die Umwandlung in Int für Java AWTs Rechteck).

public boolean contains(final Entity entity) { 
    Rectangle me = new Rectangle(x, y, width, height); 
    Rectangle them = new Rectangle(entity.getX(), entity.getY(), entity.getWidth(), entity.getHeight()); 
    java.awt.Rectangle awtMe = new java.awt.Rectangle((int) x, (int) y, (int) width, (int) height); 
    java.awt.Rectangle awtThem = new java.awt.Rectangle((int) entity.getX(), (int) entity.getY(), (int) entity.getWidth(), (int) entity.getHeight()); 
    return awtMe.contains(awtThem); // returns true correctly 
    //return me.contains(them); // never returns true 
} 

Ich bin mit Slick-Version 274. Ich bin ziemlich hoffnungslos, wenn es Entwicklung zum Spiel kommt so die mich verwirrt hat. Ich habe versucht, die Slick source for Shape.contains zu betrachten, aber es ist ein bisschen über mir in diesem Stadium. Jeder Rat, warum dies geschieht, würde geschätzt werden.

EDIT

Ok, so scheint es, dass, wenn ich die Slick2d Methoden wie folgt ...

Rückkehr me.intersects (sie) || mich.enthält (sie);

... es funktioniert wie erwartet. Ich bin mir immer noch nicht sicher, warum contains alleine nicht funktioniert.

+1

In den Kommentaren von Shape.interterectsects() (von denen ich nicht die Berechnung entweder), heißt es "wenn UA und UB sind beide zwischen 0 und 1 dann die Linien kreuzen sich. ", also denke ich, dass ihr" Schnittpunkt "nur auftritt, wenn sich die Linien schneiden, und nicht, wenn 1 Objekt vollständig von dem anderen enthalten ist. Sehr kontraintuitiv! – Torious

+1

Sie benötigen die separaten Methoden, weil Sie häufig Überschneidungen (z. B. zur Kollisionserkennung) getrennt von der Eingrenzung wissen möchten. Es scheint mir jedoch, dass Sie "contains" wie vorgesehen verwenden. Haben Sie versucht, den Autor zu kontaktieren oder den Code für die Webstart-Demos hier zu lesen ?: http://slick.cokeandcode.com/static.php?page=demos – jefflunt

Antwort

Verwandte Themen