Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

11

22.02.2012, 14:48

im moment kein objekt, sondern einfach der spielfeldrand, aber ich möchte das später universell haben für rechtecke.


Dann brauchst du auch allgemeine Eingaben. Du kannst keine Normale von einem Objekt holen, wenn du gar kein Objekt hast. Um die Normale zu erhalten brauchst du natürlich Informationen über die Oberflächenbeschafenheit des Objekts. Das ist beim Spielfeldrand natürlich trivial, daher macht es hier überhaupt kein Sinn die Sache zu verkomplizieren.
@D13_Dreinig

12

22.02.2012, 14:51

na schön, dann eben auf die *-1 weise.

aber mal angenommen, ich habe einen quadratischen sprite, und will den ball davon abprallen lassen ...?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

13

22.02.2012, 14:52

Dann betrachtest du die Seite des Sprites, an der die Kollision stattfindet und errechnest daraus den Normalenvektor.
@D13_Dreinig

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

22.02.2012, 14:52

Wo liegt das Problem? Dein Quadrat hat 4 Seiten die du kennst, je nachdem aus welcher Richtung der Ball kommt, kann er prinzipiell nur 2 davon treffen, ...

15

22.02.2012, 17:09

Wie wärs mit:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void moveBall()
        {

            position += direction * speed;

            if (position.X + texture.Width > resolution.X())
            {
                //als beispiel, weil der vektor die rechte wand trifft
                ballReflect(Vector2(-1, 0));
            }

        }

        private void ballReflect(Vector2 normal)
        {

            direction = Vector2.Reflect(direction, normal);
        }


Und wenn der Ball ein Sprite trifft wird halt stattdessen die Normale der entsprechenden Seite des Sprites übergeben.

Werbeanzeige