2013-04-03 23 views
-3

我最近问了一个问题,但还是不明白,我的意思是答案很好,但我只是不明白。我试图让球员跳起来的时间越长。还需要在高度上有一个最大值。新浪微博 - 持有更长时间跳高(示例附)

我有一个球员类的例子,我试图添加这样的功能。如果有人可以看看这个课程,请添加该功能,然后添加一些评论来帮助我,我非常感谢。 - 谢谢。

Player.cs

namespace Jumping 

{

class Player 
{ 
    public Texture2D Texture; 

    public Vector2 Velocity; 
    public Vector2 Position; 
    public float ground; 
    private float Speed; 

    private Rectangle screenBound; 

    public bool isJumping; //are we jumping or not 
    public bool goingUp; //if going up or not 

    public float u; //initial velocity 
    private float jumpU; 
    private float g; //gravity 
    public float t; //time 

    private KeyboardState prevKB; 

    public Player(Texture2D Texture, Vector2 Position, float Speed, Rectangle screenBound) 
    { 
     this.Texture = Texture; 
     this.Position = Position; 
     ground = Position.Y; 
     this.Speed = Speed; 
     this.screenBound = screenBound; 
     Velocity = Vector2.Zero; 
     isJumping = goingUp = false; 
     jumpU = 2.5f; 
     g = -9.8f; 
     t = 0; 
    } 

    public void Update(GameTime gameTime) 
    { 

     Position.X += (Velocity.X * Speed); 
     //Set the Y position to be subtracted so that the upward movement would be done by decreasing the Y value 
     Position.Y -= (Velocity.Y * Speed); 

     goingUp = (Velocity.Y > 0); 

     // TODO: Add your update logic here 
     if (isJumping == true) 
     { 
      //motion equation using velocity: v = u + at 
      Velocity.Y = (float)(u + (g * t)); 
      //Increase the timer 
      t += (float)gameTime.ElapsedGameTime.TotalSeconds; 
     } 
     if (isJumping == true && Position.Y > screenBound.Height - Texture.Height) 
     { 
      Position.Y = ground = screenBound.Height - Texture.Height; 
      Velocity.Y = 0; 
      isJumping = false; 
      t = 0; 
     } 

     if (Position.X < 0) 
     { 
      //if Texture touches left side of the screen, set the position to zero and the velocity to zero. 
      Position.X = 0; 
      Velocity.X = 0; 
     } 
     else if (Position.X + Texture.Width > screenBound.Width) 
     { 
      //if Texture touches left side of the screen, set the position to zero and the velocity to zero. 
      Position.X = screenBound.Width - Texture.Width; 
      Velocity.X = 0; 
     } 
     if (Position.Y < 0) 
     { 
      //if the Texture touches the top of the screen, reset the timer and set the initial velocity to zero. 
      Position.Y = 0; 
      t = 0; 
      u = 0; 
     } 
    } 

    public void Input(KeyboardState keyState) 
    { 
     if (keyState.IsKeyDown(Keys.Space) && (isJumping == false || Position.Y == ground)) 
     { 
      isJumping = true; 
      u = jumpU; 
     } 
     if (keyState.IsKeyDown(Keys.Left) && !keyState.IsKeyDown(Keys.Right)) 
     { 
      if (keyState.IsKeyDown(Keys.A)) 
      { 
       if (Velocity.X > -2.0f) 
       Velocity.X -= (1.0f/10); 
      } 
      else if (Velocity.X > -1.0f) 
      { 
       Velocity.X -= (1.0f/10); 
      } 
      else 
      { 
       Velocity.X = -1.0f; 
      } 
     } 
     else if (!keyState.IsKeyDown(Keys.Left) && keyState.IsKeyDown(Keys.Right)) 
     { 
      if (keyState.IsKeyDown(Keys.A)) 
      { 
       if (Velocity.X < 2.0f) 
       Velocity.X += (1.0f/10); 
      } 
      else if (Velocity.X < 1.0f) 
      { 
       Velocity.X += (1.0f/10); 
      } 
      else 
      { 
       Velocity.X = 1.0f; 
      } 
     } 
     else 
     { 
      if (Velocity.X > 0.05 || Velocity.X < -0.05) 
       Velocity.X *= 0.90f; 
      else 
       Velocity.X = 0; 
     } 

     prevKB = keyState; 
    } 

    public void Fall() 
    { 
     t = 0; 
     u = 0; 
    } 

    public void Draw(SpriteBatch spriteBatch) 
    { 
     spriteBatch.Draw(Texture, new Rectangle((int)Position.X, (int)Position.Y, Texture.Width, Texture.Height), Color.White); 
    } 
} 

}

+0

同意,不要开始另一个问题。 – Clint

+0

所以我决定花时间帮助你解决最后一个问题,但是你只是重复一下你最后的回答没有帮助吗?这将如何让你到达任何地方?如果您对我最后一个问题的回答发表评论,我可能会帮助解决您的问题。 – Cyral

回答

2

为了帮助你,不要混淆你,我会建议的做法,但它必须在稍后重构。

在你的输入法,将其添加:

public void Input(KeyboardState keyState) 
{ 
    newIsJumping = keyState.IsKeyDown(Keys.Space); 

    ... 

而在你的更新方法,使用它:

// TODO: Add your update logic here 
if (isJumping == true) 
{ 
    if (newIsJumping) u += 0.5f; // use some constant here 

    ... 

我希望它可以解决你的问题。

+0

Thankyou的帮助,但我已经将此添加到player.cs中,并且出现错误: 'newIsJumping'的名称在当前上下文中不存在。我该如何声明newIsJumping为? – user1631026

+1

我认为它和isJumping是一样的。所以一个布尔 – phadaphunk

+0

谢谢robson roase | PhaDaPhunk top lads。 – user1631026