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?
Antwort
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
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
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