2D shooter - Wand in Sichtfeld?

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Radinator.

    2D shooter - Wand in Sichtfeld?

    Hallo,

    Ich programmiere momentan an einem 2D Shooter aus der Vogelperspektive.
    In jedem Schritt werden die Wände im handles MyBase.Paint event neu gezeichnet.
    Dabei will ich nicht alle Wände des Levels zeichnen, sondern nur diese die tatsächlich im Bildschirm sind (spart FPS).
    die wände können jede Richtung (360°) haben und werden mittels e.graphics.drawline() gezeichnet.

    Derzeit löse ich es so: Beim laden wird jeweils x und y des Anfangs, der Mitte und des Endes der Wand gespeichert.
    jeden step wird überprüft: abstand vom Spieler zu Anfang/Mitte/Ende (x|y) kleiner gleich view_distance? => zeichne Wand
    View distance ist dabei ein Integer wert der den Abstand vom Spieler zum äußersten Bildpunkt repräsentiert.

    Dieses System funktioniert soweit, so gut.
    Sollte es jetzt jedoch eine extrem lange Wand geben, so kann es sein dass die Wand nicht gezeichnet wird (Abstand zu groß).
    Darum meine Frage: gibt es ein effizienteres System um zu berechnen ob die Wand (eigtl nur eine Linie) im Bild ist?

    Danke!!
    Der ViewPort ist ein Rechteck. Die Wand eine Linie. Wenn das Rechteck und die Linie aufeinander liegen ("intersect" ist das englische Wort), dann ist die Wand sichtbar. Ich bin mir sicher, es gibt Algorithmen dafür.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Passt, habe ich jetzt so einprogrammiert.
    Jede Wand wird jetzt überprüft ob sie eine der 4 Bildschirmseiten schneidet oder ob sie ganz im Bildschrim liegt.
    Von den FPS her war das jedoch keine Einsparung wie initial vermutet -> ist gleich geblieben :-/

    Danke euch!
    Oder gleich Sharpex2D ;D
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell