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?)