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

12.11.2008, 22:41

jumping function

hallo, bin neu hier und hab auch glei ne frage ich hab zwar schon in der suche was gefunden aber ich hab des nich so richtig geblickt.

Also ich wollt meinem 2dgame ne jump function geben und habs ansatzweise hinbekommen. Er springt nach oben und fliegt ein ganz kleines Stück wieder nach unten und bleibt dann dannach in der luft stehen..... :(
könnt mir vllt. jemand ne kleinen quellcode zeigen oder irgendetwas anderes ??
Quellcode kann ich ja noch schicken wenn ihr ihn sehen wollt(der sieht nicht so toll aus :? )

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

2

12.11.2008, 22:58

Zeig uns doch einfach mal was du gemacht hast! Poste doch mal deine Jump-Funktion.
Dann lässt sich leichter sagen, was bei dir verkehrt sein könnte.
Denn grundsätzlich ist es ja nicht so schwer.
Ich würde es so machen:
Wenn die Sprungtaste gedrückt wurde, wird eine boolsche Jump-Variable auf true gesetzt und der Spieler wird eine Zeit lang nach oben bewegt. Nach Ablauf dieser Zeit stoppt man diese bewegung und der Spieler sollte sich durch die Schwerkraft nach unten bewegen. Wenn der Spieler dann wieder auf dem Boden landet, wird die Jump-Variable wieder auf false gesetzt.

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

3

13.11.2008, 12:57

so

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
#include "player.h"

void player::Init()
{
    m_pSpritePlayer = new sprite;
    m_pSpritePlayer->Load("Data/lülü.bmp", 0, 500);
    m_pSpritePlayer->SetColorKey(255, 0, 255);
    jumping = false;
}



void player::processmoving ()
{
    if (g_pVerwaltung->KeyDown (SDLK_RIGHT))
    {
        Xposi += 200.0f * g_pTimer->GetElapsed ();
    }
    if (g_pVerwaltung->KeyDown (SDLK_LEFT))
    {
        Xposi -= 200.0f * g_pTimer->GetElapsed ();
    }
    if(g_pVerwaltung->KeyDown (SDLK_SPACE))
    {
        
        jumping = true;
        Gravitation = 10.0f;
        Vertikal = -300.0f;
        Gravitation2 = 10.0f;
    }
}
void player::Render()
{
    m_pSpritePlayer->SetPosi(Xposi, Yposi);
    m_pSpritePlayer->Render();
    
}
void player::jump()
{
    if (jumping == true)
    {
        
        if ( Vertikal == 0)
        {
            jumping = false;
        }

        
        if (Vertikal<0)
        {
            Gravitation += 1;
            Vertikal = Vertikal + Gravitation;
            Yposi += Vertikal  * g_pTimer->GetElapsed();
            cout << Vertikal;
        }
        
        if(Vertikal>0) 
        {
            Gravitation2 -= 1 ;
            Vertikal = Vertikal - Gravitation2;
            Yposi -= Vertikal * g_pTimer->GetElapsed();
        

        }
    
    }
}


....ich weis er sieht nicht so toll aus, und weis auch nicht ob es richtig so ist.....

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

13.11.2008, 13:35

Ich denke mal, dass du das viel zu kompiliziert machst.

Du hast jetzt z.B eine Figur, die konstant auf den Boden gezogen wird (Gravitation) und wenn du jetzt Jump machst, soll ganz einfach eine Kraft nach oben wirken, welche dann aber aber durch die Schwerkraft wieder verringert wird, bis sie schlussendlich 0 ist und nur noch die Schwerkraft wirkt.

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

5

13.11.2008, 13:38

Machs doch mit einfacher Physik!
Nur für die y-Komponente gilt:

Zitat


v(t + dt) = v(t) - g * dt
y(t + dt) = y(t) + v(t + dt) * dt

dt ist die vergangene Zeit seit dem letzen Frame
g ist die Gravitationsbeschleunigung: Im Normalfall g = 9.81f
y(t), v(t) sind die Werte vom letzten frame
y(t + dt), v(t + dt) sind die neuen Werte


Wenn du nun springen möchtest, setz einfach die vertikale Geschwindigkeit des Spielers auf eine gewisse Startgeschwindigkeit v(t) = v0. Dann musst du nur noch abfangen, wenn der Spieler wieder auf dem Boden ankommt, die vertikale Geschwindigkeit auf Null setzen und die Beschleundigungen nicht mehr wirken lassen.
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Nexxtron

Alter Hase

  • »Nexxtron« ist der Autor dieses Themas

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

6

13.11.2008, 19:10

Frage :

was soll die Variablen v und y und t sein?? sry wenn ich mich jetzt blöd anstell....

7

13.11.2008, 19:47

y ist die y-koordinate deines männchens, v die geschwindigkeit nach oben und t die seit dem letzten frame vergangene zeit

Werbeanzeige