Gast345678: Kollisionserkennung

Hallo,
ich bin gerade dabei ein Spiel zu programmieren. Ich habe einen Gegner der mit einem unregelmäßig geformten Bild dargestellt wird und eine Kugel. Gibt es dafür eine Möglichkeit zu einer 100-prozentig genauen Kollisionserkennung?

  1. Tach!

    Ich habe einen Gegner der mit einem unregelmäßig geformten Bild dargestellt wird und eine Kugel. Gibt es dafür eine Möglichkeit zu einer 100-prozentig genauen Kollisionserkennung?

    Meines Wissens ja. Abgesehen davon, dass du in deinem Koordinatensystem wissen müsstest, welche Punkte von dem einen Objekt belegt sind und dies mit den Punkten des anderen Objekts vergleichen kannst, gibt es noch die Möglichkeit, festzustellen ob sich ein Punkt innerhalb eines Dreiecks (oder war es sogar beliebiges Vieleck?) oder außerhalb befindet. Kollisionserkennung ist ein so oft benötigtes Feature, dass dazu ausreichend Literatur im Netz zu finden sein sollte.

    dedlfix.

    1. Tach!

      Ich habe einen Gegner der mit einem unregelmäßig geformten Bild dargestellt wird und eine Kugel. Gibt es dafür eine Möglichkeit zu einer 100-prozentig genauen Kollisionserkennung?

      Meines Wissens ja. Abgesehen davon, dass du in deinem Koordinatensystem wissen müsstest, welche Punkte von dem einen Objekt belegt sind und dies mit den Punkten des anderen Objekts vergleichen kannst, gibt es noch die Möglichkeit, festzustellen ob sich ein Punkt innerhalb eines Dreiecks (oder war es sogar beliebiges Vieleck?) oder außerhalb befindet. Kollisionserkennung ist ein so oft benötigtes Feature, dass dazu ausreichend Literatur im Netz zu finden sein sollte.

      Ich werf mal das Stichwort "hyperplane seperation theorem" in den Raum

      1. Meine Herren,

        Ich werf mal das Stichwort "hyperplane seperation theorem" in den Raum

        Deshalb unterscheiden viele Physik-Engines zwischen konkaven und konvexen Objekten. Konkave Objekte werden dann über Joint-Points aus mehreren konvexen Objekten zusammen gesetzt. Box2D macht das zum Beispiel so.

        --
        Hey Girl,
        i wish you were asynchronous, so you'd give me a callback.
        1. Laut Wikipedia soll es dazu eine einfache Methode: "Eine weitere Verbesserung für Computerspiele war die Sprite-Sprite-Kollisionserkennung. Sobald der Grafikprozessor beim Erstellen des Bildes erkennt, dass sich zwei Sprites überlappen, wird dies der Software per Interrupt, Flag oder Event mitgeteilt. Damit sind die meisten Computerspiele vergleichsweise einfach zu programmieren, weil sich das Programm nicht um die Kollisionserkennung kümmern muss und für diese keine Rechenleistung verbraucht."(Wikipedia, Sprite (Computergrafik)). Gibt es dafür vielleicht einen eventListener?

          1. Laut Wikipedia soll es dazu eine einfache Methode: "Eine weitere Verbesserung für Computerspiele war die Sprite-Sprite-Kollisionserkennung. Sobald der Grafikprozessor beim Erstellen des Bildes erkennt, dass sich zwei Sprites überlappen, wird dies der Software per Interrupt, Flag oder Event mitgeteilt. Damit sind die meisten Computerspiele vergleichsweise einfach zu programmieren, weil sich das Programm nicht um die Kollisionserkennung kümmern muss und für diese keine Rechenleistung verbraucht."(Wikipedia, Sprite (Computergrafik)). Gibt es dafür vielleicht einen eventListener?

            => nein. Du redest von "echten" Sprites, also Grafiken, die von der Grafikkarte erzeugt und gesteuert werden. Da hast du mit JavaScript keinen Zugriff.

            1. Meine Herren,

              => nein. Du redest von "echten" Sprites, also Grafiken, die von der Grafikkarte erzeugt und gesteuert werden. Da hast du mit JavaScript keinen Zugriff.

              WebGL!

              --
              Hey Girl,
              i wish you were asynchronous, so you'd give me a callback.
              1. Hallo,

                => nein. Du redest von "echten" Sprites, also Grafiken, die von der Grafikkarte erzeugt und gesteuert werden. Da hast du mit JavaScript keinen Zugriff.

                WebGL!

                WebGL hat mit "echten" Sprites nichts zu tun. Sprites stammen aus der Zeit der 8-Bitter (C64 und Co), und sind heute meist von anderen Techniken verdrängt worden. Man hat mittlerweile genug Speicher.

                http://www.c64-wiki.de/index.php/Sprite

                "However, the little VIC-II graphics chip that controlled the display had a neat feature: sprites. VIC-II sprites are hardware controlled graphical objects that can be displayed and moved around on a layer above the usual graphics or text display. You can have up to eight of them on the screen at once."

                http://everything2.com/title/Creating+a+sprite+on+a+Commodore+64

                1. Meine Herren,

                  Hallo,

                  => nein. Du redest von "echten" Sprites, also Grafiken, die von der Grafikkarte erzeugt und gesteuert werden. Da hast du mit JavaScript keinen Zugriff.

                  WebGL!

                  WebGL hat mit "echten" Sprites nichts zu tun. Sprites stammen aus der Zeit der 8-Bitter (C64 und Co), und sind heute meist von anderen Techniken verdrängt worden. Man hat mittlerweile genug Speicher.

                  Du hast recht. Meine Auffassung von Sprites ist weniger historisch belastet, und war in diesem Kontext aber falsch verwendet, das sieht man auch in meiner anderen Antwort.

                  --
                  Hey Girl,
                  i wish you were asynchronous, so you'd give me a callback.
                  1. hi,

                    WebGL hat mit "echten" Sprites nichts zu tun. Sprites stammen aus der Zeit der 8-Bitter (C64 und Co), und sind heute meist von anderen Techniken verdrängt worden. Man hat mittlerweile genug Speicher.

                    Du hast recht. Meine Auffassung von Sprites ist weniger historisch belastet, und war in diesem Kontext aber falsch verwendet, das sieht man auch in meiner anderen Antwort.

                    macht nix. Ich schwelge halt oftmals gerne in der Vergangenheit... :) So gesehen war mein Gesülze wenig konstruktiv, ich wollte den Threadstarter nur darauf hinweisen, dass (automatische) Kollisionserkennung auf Sprite-Ebene, so wie er es dargestellt hat, unter JavaScript keinesfalls funktionieren kann. Hier muss man mit Software-Sprites ran. In diesem Fall mit img-Elementen.

          2. Meine Herren,

            Laut Wikipedia soll es dazu eine einfache Methode: "Eine weitere Verbesserung für Computerspiele war die Sprite-Sprite-Kollisionserkennung. Sobald der Grafikprozessor beim Erstellen des Bildes erkennt, dass sich zwei Sprites überlappen, wird dies der Software per Interrupt, Flag oder Event mitgeteilt. [...]"

            Der Auszug ist leider relativ allgemein, ich vermute dass eine PerPixel-Kollisionserkennung gemeint ist. Dabei zeichnet man die betroffenen Sprites mit geeigneten Blend-Modi in einen Buffer und prüft, ob dieser Buffer nicht-transparente Pixel enthält. Sollte das der Fall liegt eine Kollision vor.

            Damit sind die meisten Computerspiele vergleichsweise einfach zu programmieren, weil sich das Programm nicht um die Kollisionserkennung kümmern muss und für diese keine Rechenleistung verbraucht."

            Auch hier muss ich raten, was der Author des Artikels gemeint hat. Möglicherweise meinte er, dass bei einer PerPixel-Berechnung nicht zusätzlich eine physische Repräsentation des Modells erschaffen werden muss.

            Nachteil von PerPixe-Algorithmen ist, dass lediglich eine Kollision erkannt werden kann oder eben nicht. In den meisten Fällen reicht das nicht aus. Beispielsweise ist es häufig interessant zu wissen, wie weit sich die Objekte überschneiden, an welcher Stelle und aus welcher Richtung die Objekte kamen.

            Gibt es dafür vielleicht einen eventListener?

            Nicht im Standard-Sprachumfang von Javascript oder DOM. Worauf basiert dein Spiel denn? D.h. welche Frameworks benutzt du, wenn du welche benutzt. Was ist dein Ausgabemedium (Canvas, WebGL, SVG, HTML?).

            --
            Hey Girl,
            i wish you were asynchronous, so you'd give me a callback.
  2. Meine Herren,

    Hallo,
    ich bin gerade dabei ein Spiel zu programmieren. Ich habe einen Gegner der mit einem unregelmäßig geformten Bild dargestellt wird und eine Kugel. Gibt es dafür eine Möglichkeit zu einer 100-prozentig genauen Kollisionserkennung?

    100%ige Kollisionserkennung ist ein schwieriges Thema. In den meisten Fällen ist es empfehlenswert zugunsten der Performanz Abstriche bei der Genauigkeit zu machen.

    Kollisionserkennung zwischen einem zweidimensionalen Bild und einem dreidimensionalen Körper (in deinem Fall eine Kugel) scheint mir außerdem ein seltsamer Anwendungsfall zu sein. Die mir bekannten Techniken beschränken sich auf Kollisionen zwischen Körpern der selben Dimension.

    http://gamedev.tutsplus.com/ ist eine gute Anlaufstelle für Spieleentwicklung. Die Tutorial-Palette reicht von einfachen Kollisionsberechnungen zwischen 2- und 3-dimensionalen Körpern über fortgeschrittene Techniken wie Tunnelungs-Effekte bis hin zur Einführung in etablierte Physik-Engines wie Box2D und Bullet (3D).

    --
    Hey Girl,
    i wish you were asynchronous, so you'd give me a callback.