1.Fall: Spielfigur steht unten und will hochklettern
Die Spielfigur kann die Leiter nicht hochklettern, jedoch kann sie ein Stück unten durch den Boden klettern.
2.Fall: Spielfigur steht oben und will runterklettern
Die Spielfigur kann die Leiter nur manchmal runterklettern. Und wenn sie mal runterklettert wird sie unten bei Bodenberührung wieder in die Mitte der Leiter zurückgesetzt.
Es funktionieren also einige Dinge noch nicht, jedoch weiss ich nicht was falsch ist
Für mich sehen die if-Abfragen richtig aus. Jedoch muss doch wohl etwas daran falsch sein sonst müsste das Klettern doch funktionieren, oder?
Wie kann ich das Kletter-Problem lösen?
|
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
|
if (kbState.IsKeyDown(Keys.Left))
{
playerrect.ApplyForce(new Vector2(-0.5f, 0));
}
if (kbState.IsKeyDown(Keys.Right))
{
playerrect.ApplyForce(new Vector2(0.5f, 0));
}
if (isOnGround == true)
{
if (kbState.IsKeyDown(Keys.Space))
{
playerrect.ApplyForce(new Vector2(0, -24.0f));
}
}
if (playerrect.Position.X * 100 >= ladderrect.X - 20 && playerrect.Position.X * 100 <= ladderrect.X + 20)
{
if (kbState.IsKeyDown(Keys.Up))
{
if ((playerrect.Position.Y + playerSprite.Height / 2) * 100 <= ladderrect.Top && (playerrect.Position.Y + playerSprite.Height / 2) * 100 >= ladderrect.Bottom)
{
playerrect.IgnoreGravity = true;
playerrect.Position = new Vector2(playerrect.Position.X, playerrect.Position.Y - 0.01f);
}
}
if (kbState.IsKeyDown(Keys.Down))
{
if ((playerrect.Position.Y + playerSprite.Height / 2) * 100 >= ladderrect.Top && (playerrect.Position.Y + playerSprite.Height / 2) * 100 >= ladderrect.Bottom)
{
playerrect.IgnoreGravity = true;
playerrect.Position = new Vector2(playerrect.Position.X, playerrect.Position.Y + 0.01f);
}
}
}
else
playerrect.IgnoreGravity = false;
|
und so wird gezeichnet:
|
C#-Quelltext
|
1
2
|
spriteBatch.Draw(ladderSprite, ladderrect, null, Color.White, 0, new Vector2(ladderSprite.Width / 2.0f, ladderSprite.Height / 2.0f),SpriteEffects.None,0f);
spriteBatch.Draw(playerSprite, ConvertUnits.ToDisplayUnits(playerrect.Position), null, Color.White, playerrect.Rotation, new Vector2(playerSprite.Width / 2.0f, playerSprite.Height / 2.0f), 1f, SpriteEffects.None, 0f);
|