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

1

02.02.2012, 22:09

Animations-Fehler

hi,

da ich für mein Jump&Run eine Sprungbewegung brauche, bin ich gerade eifrig am basteln.
Mit meiner jetzigen Lösung habe ich allerdings 2 Probleme:

1. Wenn man das Männchen bewegt, geht es bis zum Ende seiner Animation, hört dann aber auf und gleitet in der Stillstand-Animation über den Boden... (Rückwärts/Vorwärts ohne die Beine zu bewegen, ohne Sprungalgorithmus gehts).
2. Wenn das Männchen die maximale Sprunghöhe erreicht hat, soll es wieder absinken. Hab aber keinen Plan, wie das bewerkstelligen soll. Im Moment hab ich den Algorithmus dafür schon gebaut, allerdings sinkt er dann ja unter die Maximalhöhe und kann dann somit wieder aufsteigen (da er laut drunter ist und dann in die alte If() verfällt..) sieht etwas komisch aus, wenn er über die Decke schrammt und dauernd auf, ab, auf, ab (Wie zittern)...

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
74
75
76
77
78
79
80
81
82
83
84
85
86
void CPlayer::ProcessMoving()
{
    fJumpHeight += 50 * g_pTimer->GetElapsed();
    m_fYPos += fJumpHeight * g_pTimer->GetElapsed();

    //Links gehen
    if(g_pFramework->KeyDown(SDLK_a))
    {
        m_fXPos -= 100.0f * g_pTimer->GetElapsed();

        m_fAnimPhase -= 10.0f * g_pTimer->GetElapsed();
    }
    //Rechts gehen
    else if(g_pFramework->KeyDown(SDLK_d))
    {
        m_fXPos += 100.0f * g_pTimer->GetElapsed();

        m_fAnimPhase += 10.0f * g_pTimer->GetElapsed();
    }else
    //Stehen bleiben
    {
        if(m_fAnimPhase > 4.0f)
        {
            m_fAnimPhase = 5.0f;
        }
        if(m_fAnimPhase < 4.0f)
        {
            m_fAnimPhase = 4.0f;
        }
    }
    //Springen
    if(g_pFramework->KeyDown(SDLK_SPACE))
    {
        m_fYPos += fJumpHeight * g_pTimer->GetElapsed();

        if(m_fYPos >= 460.0f)
        {
            fJumpHeight = 1.0f;
            m_fYPos -= fJumpHeight;
            fJumpHeight++;
        }else if(m_fYPos <= 460.0f)
        {

            fJumpHeight = -1.0f;
            m_fYPos -= fJumpHeight;
            fJumpHeight--;
        }
    }else
    //Stehen bleiben
    {
        if(m_fAnimPhase > 4.0f)
        {
            m_fAnimPhase = 5.0f;
        }
        if(m_fAnimPhase < 4.0f)
        {
            m_fAnimPhase = 4.0f;
        }
    }
}

void CPlayer::CheckPosition()
{
    //Links und rechts ist Rand (Mauer des Turms)
    if(m_fXPos < 24.0f)
    {
        m_fXPos = 24.0f;
    } else if(m_fXPos > 776.0f)
    {
        m_fXPos = 776.0f;
    }
    //Animationen überprüfen
    if(m_fAnimPhase < 0.0f)
    {
        m_fAnimPhase = 4.0f;
    }else if(m_fAnimPhase > 9.0f)
    {
        m_fAnimPhase = 5.0f;
    }
    //Bodenkontakt und Sprunghöhe überprüfen
    if (m_fYPos >= 520.0f)
    {
        m_fYPos = 520.0f;
        fJumpHeight = 0.0f;
    }
}


Hoffe ihr könnt mir weiterhelfen, vor allem beim ersten Teil. Den zweiten sollte ich auch allein schaffen (Evtl. Tipps?)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Zweistein2« (02.02.2012, 22:38)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

02.02.2012, 22:21

Ein Sprung ist nichts weiter als ein schiefer Wurf:
http://de.wikipedia.org/wiki/Wurfparabel

Du legst einfach Deinen Startpunkt fest, die Anfangsgeschwindigkeit, bzw. den Anfangsgeschwindigkeitsvektor, kennst die Gravitation und die verstrichene Zeit kannst Du ja sicher irgendwie messen. Alles einsetzen in die Formel und schon hast Du einen Sprung, der weder von Deiner Framerate, noch von irgendwas anderem abhängt oder abgehackt aussehen würde.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

02.02.2012, 22:38

Nunja, eigentlich bin ich mit dem Sprung an sich ganz zufrieden. Mir geht es hauptsächlich um dieses Problem:

Zitat

1. Wenn man das Männchen bewegt, geht es bis zum Ende seiner Animation, hört dann aber auf und gleitet in der Stillstand-Animation über den Boden... (Rückwärts/Vorwärts ohne die Beine zu bewegen, ohne Sprungalgorithmus gehts).
außerdem fängt es während dem Sprung mit der Lauf-Animation an.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

03.02.2012, 08:35

Das liegt vermutlich daran, dass Dir die notwendige Statemachine fehlt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige