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

CrazyPlayer

Treue Seele

  • »CrazyPlayer« ist der Autor dieses Themas

Beiträge: 109

Wohnort: Mittenwald [Garmischpartenkirchen]

Beruf: Schüler

  • Private Nachricht senden

1

01.01.2010, 23:07

Jump & Run: Springen problem

Frohes Neues Jahr Community,
ich arbeite zurzeit an ein Jump & Run Projekt mit SDL. Meine Problem ist jetzt das Springen. Wie mach ich das? Ich denk mal ich muss wohl die Gravitaion Programmieren oder? Wie realiesiere ich ein Sprung am besten?
Danke im Voraus
Every day is a programming day ;)

2

01.01.2010, 23:13

Oder auch nur ganz einfach mit einem zeitabhängigen Sinus.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

01.01.2010, 23:14

Du verschiebst die Figur einfach ständig nach unten und wenn du eine Kollision (mit dem Boden) hast, dann setzt du die Figur einfach an den Ort, wo es keine Kollision gab.
Für einen Sprung musst du dann noch schauen, wie du die Beschleunigung nach oben machst und wieder zurück. (Ist mehr ausprobieren). Weil alles mit Konstanter Geschwindigkeit machen sieht blöd aus.

4

01.01.2010, 23:18

Zitat von »"k|haos"«

Oder auch nur ganz einfach mit einem zeitabhängigen Sinus.

Hm, keine sehr gute Idee. Es geht einfacher und realistischer:
Die Geschwindigkeit entlang der X Achse ist Konstant (wenn er im Laufen abspringt). Beim Sprung bekommt der Spieler eine negative Y Geschwindigkeit von -10 (als Beispiel), d.h. bewegt sich nach oben. In jedem Frame wird die Y Geschwindigkeit um z.B. 1 erhöht. Außerdem wird der Spieler um die aktuelle Geschwindigkeit bewegt.
Das Ergebnis ist eine Sprungparabel und lässt sich sehr gut benutzen. Als kleinen Bonus fällt man auch automatisch von Kanten, wenn man über diese läuft, d.h. die Y Geschwindigkeit erhöht sich immer, wenn der Spieler nicht auf Boden steht, tut er das, wird sie auf 0 gesetzt.
Das ganze kann man noch erweitern, aber im Grunde reicht das für den Anfang völlig.
Lieber dumm fragen, als dumm bleiben!

CrazyPlayer

Treue Seele

  • »CrazyPlayer« ist der Autor dieses Themas

Beiträge: 109

Wohnort: Mittenwald [Garmischpartenkirchen]

Beruf: Schüler

  • Private Nachricht senden

5

01.01.2010, 23:28

Zitat

k|haos:
Oder auch nur ganz einfach mit einem zeitabhängigen Sinus.

Ahhhrg Sinus den check ich irgendwie nicht

Zitat

drakon:
Du verschiebst die Figur einfach ständig nach unten und wenn du eine Kollision (mit dem Boden) hast, dann setzt du die Figur einfach an den Ort, wo es keine Kollision gab.
Für einen Sprung musst du dann noch schauen, wie du die Beschleunigung nach oben machst und wieder zurück. (Ist mehr ausprobieren). Weil alles mit Konstanter Geschwindigkeit machen sieht blöd aus.

Also das mit die Kollision is kein Thema ;) .
Every day is a programming day ;)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

6

01.01.2010, 23:40

Jop. Dann machs doch mal so, wie ich und Jonathan vorschlagen. Das gibt schon recht gute Ergebnise.
(Nicht vergessen die Minusgeschwindigkeit auf 0 zu setzen (vlt. auch abprallen), wenn du oben an eine Grenze stösst, sonst klebst du an der Decke. Bei Far Cry habe ich so einen Bug mal entdeckt. :p)

CrazyPlayer

Treue Seele

  • »CrazyPlayer« ist der Autor dieses Themas

Beiträge: 109

Wohnort: Mittenwald [Garmischpartenkirchen]

Beruf: Schüler

  • Private Nachricht senden

7

01.01.2010, 23:45

Jep ich probiere es gerade wird ein bisschen dauer :lol: . Sobald das gewünschte Ergebniss hab Poste ich es hierher.
Every day is a programming day ;)

CrazyPlayer

Treue Seele

  • »CrazyPlayer« ist der Autor dieses Themas

Beiträge: 109

Wohnort: Mittenwald [Garmischpartenkirchen]

Beruf: Schüler

  • Private Nachricht senden

8

02.01.2010, 00:15

Geschaft, jetzt ist aber das problem das er nach ein paar sek. springt wieso?
Every day is a programming day ;)

9

02.01.2010, 01:10

Woher sollen wir das wissen?

Mal ehrlich, mehr Details, am besten clever ausgewählte Codeausschnitte.
Lieber dumm fragen, als dumm bleiben!

CrazyPlayer

Treue Seele

  • »CrazyPlayer« ist der Autor dieses Themas

Beiträge: 109

Wohnort: Mittenwald [Garmischpartenkirchen]

Beruf: Schüler

  • Private Nachricht senden

10

02.01.2010, 01:24

oh sorry :oops:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
void Dot::Jump()
{
    if(bJump == true)
        {
            yVel -= 10;
            if(yVel <= -30)
                bJump = false;
        }
}


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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
int main(int argc, char* args[] )
{
    bool quit = false;

    Dot myDot;

    Tile *tiles[TOTAL_TILES];

    Timer fps;

    if(init() == false)
        return 1;
    if(load_files() == false)
        return 1;

    clip_tiles();

    if(set_tiles(tiles) == false)
        return 1;

    while(quit == false)
    {
        //Start the frame timer

        fps.start();

        for(int t = 0; t < TOTAL_TILES; t++)
            tiles[t]->show();
        myDot.move( tiles );
        //While there's events to handle

        while( SDL_PollEvent( &event ) )
        {
            //Handle events for the dot

            myDot.handle_input();

            //If the user has Xed out the window

            if( event.type == SDL_QUIT )
            {
                //Quit the program

                quit = true;
            }
        }

        


        

        //Set the camera

        myDot.set_camera();

        myDot.Jump();
        myDot.show();



        //Update the screen

        if( SDL_Flip( screen ) == -1 )
        {
            return 1;
        }

        //Cap the frame rate

        if( fps.get_ticks() < 1000 / FRAMES_PER_SECOND )
        {
            SDL_Delay( ( 1000 / FRAMES_PER_SECOND ) - fps.get_ticks() );
        }
    }

    //Clean up

    clean_up( tiles );

    return 0;
}

Achja irgendwas stimmt mit der Schwerkraft nicht... Ich mach es immer so

C-/C++-Quelltext

1
yVel -= 4; 
Aber ich denke das ist wohl falsch
Every day is a programming day ;)

Werbeanzeige