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

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

1

15.11.2008, 20:51

Kollision!

hi@all
hab mal ne frage:

ich will grad so ein super mario game machen....hab jetzt schon mal meiner figur laufen und springen^^ beigebracht nur jezt hab ich ein Problem mit der Kollision....ich hab keine anhung wie man des macht. Also ich wollt mal wissen wie des geht wenn man eine Kiste jetzt zwischen meiner figur und dem weg hinsetzt...und jetzt will ich dass ich nicht an der Kiste vorbeilaufen kann, sondern drüberspringen muss. Solll man des dann mit ganz vielen If functionen machen oder gibts da was anderes. Oder wär nett wenn mir jm. ein c++ code zur veranschaulichung zeigen kann......

Thx schonmal im voraus

2

15.11.2008, 21:01

um ein wenig if wirst du nicht herumkommen (und sei froh, im 2dimensionalen raum ist es noch recht einfach :D) In Kalistas Buch sieht die Kollisionsabfrage folgendermaßen aus:

Quellcode

1
2
3
4
if(RectShot.y<RectAsteroid.y+RectAsteroid.h &&
   RectShot.y+RectShot.h<RectAsteroid.y &&
   RectShot.x<RectAsteroid.x+RectAsteroid.w &&
   RectShot.x+RectShot.w<RectAsteroid.x)


P.S. Keine Haftung für Richtigkeit oder Tippfehler.

3

15.11.2008, 22:21

Nimm einfach mal 2 Papierstückchen, leg sie übereinander und überlege, wie du die Kollision ermitteln kannst.

für die Y Achse gilt: Wenn die Oberkannte von Rect1 kleiner ist als die Unterkannte von Rect2 und wenn die Unterkannte von Rect2 größer ist als die Oberkannte von Rect1 (mit größer mein ich ein größeren X-Wert)
So schneiden sie sich schonmal auf der Y-Achse, mach das gleiche dann noch für die X-Achse und schon hast du es ;)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

16.11.2008, 12:32

Kannst dir ansonten auch mal das anschauen:

http://flashmove.com/forum/showthread.php?t=15513

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

5

16.11.2008, 18:46

hab nochn problem:

wie kann ich 2d bilder verkleinern, aber nicht ausschneiden? Oder muus ich des in Paint machen oder so?
New Project: Operation CityRacer

6

16.11.2008, 19:01

Kommt auf die verwendete API kann. Manche können es, manche nicht (bei denn muss man dass dan mit mehr oder weniger Aufwand selber einbauen).
Lieber dumm fragen, als dumm bleiben!

7

16.11.2008, 19:16

Zitat von »"Nexxtron"«

hab nochn problem:

wie kann ich 2d bilder verkleinern, aber nicht ausschneiden? Oder muus ich des in Paint machen oder so?


mit Paint gehts recht schnell :)

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

8

16.11.2008, 19:27

k thx für die vielen Antworten :D, habs jetzt so gemacht

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (Player.x > Kiste.x - Kiste.w/2 * 1.5 && Player.y - Player.h - Player.h > Kiste.h/2 && Player.x + Player.w < Kiste.x + Kiste.w)
            
      {  
          
          Xposi = Kiste.x - Kiste.w/2 * 1.5;

        cout << "Check Collision";
      }
       if (Player.x < Kiste.x + Kiste.w/2 * 1.5 && Player.y - Player.h - Player.h > Kiste.h/2 && Player.x - Player.w > Kiste.x - Kiste.w)
            
      {  
          
          Xposi = Kiste.x + Kiste.w/2 * 1.5;

        cout << "Check Collision";
      }
nur leider hab ich keine Anhung wie ich des jetzt machen soll, dass ich auf die Kiste drauf springen kann und dass die Gravitation ihn nicht wieda runter zieht und bei der jumping funktions abfrage hab ich des auch dass wenn man nicht unter 500 kommt bleibt die Jump funktion an und er wird wieda nach unten gezogen.........

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void player::jump()
{
    if (jumping == true)
    {
    
        

        

            h -= Vertikal + Gravitation * g_pTimer->GetElapsed();
            Yposi -= h + Gravitation * g_pTimer->GetElapsed();
            Xposi ++;


        if ( Yposi > 501 )
        {
            Yposi = 500;
            jumping = false;
            jumplock = true;
        }
    
    }
}



danke wieda im voraus..... Ich wußte nicht ob ich einen neuen thread aufmachen sollt oder nicht!!! seid mir nicht böse :(
New Project: Operation CityRacer

Werbeanzeige