hallo,
ich hab ein kleines Problem in meine 2D Jump&Run. Ich habe eine Spielfigur, mit den Eigenschaften x, y, width, height, Speed, VerticalSpeed und InAir. Jetzt möchte ich überprüfen ob die Figur auf einem Objekt steht, wenn ja, dann soll VerticalSpeed auf 0, damit er oben stehen bleibt und nicht durchfällt. Das sieht im Moment so aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
void CPlayer::CheckCollision(CObject* pObject)
{
int ox, oy, owidth, oheight;
pObject->GetPosition(&ox, &oy);
pObject->GetSize(&owidth, &oheight);
//Top
if(y+height > oy)
{
if(x+width > ox && x < ox+owidth)
{
InAir = false;
VerticalSpeed = 0;
y = oy-height;
}
}
}
|
Das Problem ist jetzt, dass wenn ich auf einem Objekt stehe, und runter laufe, ich auf Höhe des Objekts bleibe, anstatt zu fallen.
Ach ja, so bewegt sich der Spieler:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
void CPlayer::ProcessInput(CKeyboard* pKeyboard, double pSecondsPassed)
{
if(pKeyboard->IsDown(DIK_LEFT)) x-=Speed;
if(pKeyboard->IsDown(DIK_RIGHT)) x+=Speed;
if(pKeyboard->IsDown(DIK_SPACE) && !InAir)
{
InAir = true;
VerticalSpeed = -15;
}
if(InAir)
{
y += static_cast<int>(VerticalSpeed);
VerticalSpeed += 20*pSecondsPassed;
}
}
|