2010-12-18 3 views
0

Ich habe eine Array von Sprite-Klassen mit diesen Methoden: x, y, width und height. Sie sind basierend auf seiner z Eigenschaft sortiert. Die letzten sind oben. Ich habe auch die Bildschirmgröße. Woher weiß ich, ob ein bestimmter Sprite sichtbar ist?Wie überprüft man, ob ein Sprite-Objekt sichtbar ist?

+0

Beschreiben Sie, wie ein Sprite in Ihrem Szenario unsichtbar sein kann und warum Sie es steuern möchten. Weil es vollständig (in z) ein anderes Sprite (s) ist? weil es außerhalb der Bildschirmgrenzen liegt? bitte erweitern. – tokland

Antwort

2

Der einfachste Weg, "es zum Laufen zu bringen" ist, in umgekehrter Z-Reihenfolge darzustellen. Das ist am nächsten.

Sonst haben Sie ein N^2 Problem, Okklusion zu finden. Sie optimieren dies, indem Sie Okklusionsbäume erstellen.

Eine weitere Option könnte eine Tiefenprüfung des Puffers sein.

class Sprite 
    def occluded?(other) 
    # check collision in X and Y 
    # if they are colliding and self.z < other.z then self is partially or fully occluded 
    end 
end 
+1

Wenn Sie in dieser Reihenfolge rendern, haben Sie jedoch das Problem der Überzeichnung. Durch Ausführen von [z-culling] (http://en.wikipedia.org/wiki/Z-buffering#Z-culling), das am nächsten an erster Stelle steht, können Sie es vermeiden, solche zu zeichnen, die nicht vollständig sichtbar sind. (Aber traditionelle z-culling verwendet per-Pixel-Zugriff, etwas, das möglicherweise nicht für das OP verfügbar ist.) – Phrogz