Не работает клавиша Space в игре

208
13 декабря 2017, 20:32
  // Main
  public class Player
  {
     public Texture2D texture, bulletTexture;
     public Vector2 position;
     public int speed;
     public float bulletDelay;
     public Rectangle boundingBox;
     public bool isColliding;
     public List<Bullet> bulletList;
    // Constructor
    public Player()
    {
        bulletList = new List<Bullet>();
        texture = null;
        position = new Vector2(400, 450);
        bulletDelay = 20;
        speed = 10;
        isColliding = false;
    }
    // Load Content
    public void LoadContent(ContentManager Content)
    {
        texture = Content.Load<Texture2D>("player");
        bulletTexture = Content.Load<Texture2D>("Bullet8");
    }
    // Draw
    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(texture, position, Color.White);
        foreach (Bullet b in bulletList)
            b.Draw(spriteBatch);
    }
    // Update
    public void Update(GameTime gameTime)
    {
        // Getting Keyboard State
        KeyboardState keyState = Keyboard.GetState();
        // Fire Bullets
        if (keyState.IsKeyDown(Keys.Space))
        {
            Shoot();     
        }
        UpdateBullets();
        // Ship Controls
        if (keyState.IsKeyDown(Keys.Up))
            position.Y = position.Y - speed;
        if (keyState.IsKeyDown(Keys.Down))
            position.Y = position.Y + speed;
        if (keyState.IsKeyDown(Keys.Left))
            position.X = position.X - speed;
        if (keyState.IsKeyDown(Keys.Right))
            position.X = position.X + speed;
        // Keep Player Ship In Screen Bounds
        if (position.X <= 0)
            position.X = 0;
        if (position.X >= 800 - texture.Width)
            position.X = 800 - texture.Width;
        if (position.Y <= 0)
            position.Y = 0;
        if (position.Y >= 950 - texture.Height)
            position.Y = 950 - texture.Height;
    }
    // Shoot Method
    public void Shoot()
    {
        if (bulletDelay >= 0)
            bulletDelay--;
        if (bulletDelay <= 0)
        {
            Bullet newBullet = new Bullet(bulletTexture);
            newBullet.position = new Vector2(position.X + 32 - newBullet.texture.Width / 2, position.Y + 30);
            newBullet.isVisible = true ;
            if (bulletList.Count() < 20)
                bulletList.Add(newBullet);
        }
        if (bulletDelay == 0)
            bulletDelay = 20;
    }
    public void UpdateBullets()
    {
        foreach(Bullet b in bulletList)
        {
            b.position.Y = b.position.Y - b.speed;
            if (b.position.Y <= 0)
                b.isVisible = false;
        }
        for (int i = 0; i < bulletList.Count; i++)
        {
            if(bulletList[i].isVisible)
            {
                bulletList.RemoveAt(i);
                i--;
            }
        }
    }
}
Answer 1

Отладчик в помощь. Но, судя по коду, у тебя ошибка в методе public void Shoot() Ты сбрасываешь таймер только при bulletDelay == 0, но первый же вызов задаст его в -1.

P.S. Переходи с XNA на Unity. XNA мёртв. :)

// Shoot Method
public void Shoot()
{
    if (bulletDelay > 0)
    {
        bulletDelay--;
        return;
    }
    bulletDelay = 20;
    {
        Bullet newBullet = new Bullet(bulletTexture);
        newBullet.position = new Vector2(position.X + 32 - newBullet.texture.Width / 2, position.Y + 30);
        newBullet.isVisible = true ;
        if (bulletList.Count() < 20)
            bulletList.Add(newBullet);
    }
}
READ ALSO
Реализация быстрой сортировки [требует правки]

Реализация быстрой сортировки [требует правки]

Без команд QuickSort, без встроенных функцией, рекурсивноhttps://ru

152
Странный баг/лаг в VS C# при загрузке xml-документа

Странный баг/лаг в VS C# при загрузке xml-документа

Ситуация: загружаю два svg-документа, один из моего редактора, второй из стороннегопервый грузится как надо, информация с него считывается,...

168
Проблема с Task.Completed

Проблема с Task.Completed

Скачиваю файл из интернета и мне нужно отображать при этом прогресс скачивания на формеПосле скачивания прогрессбар должен быть спрятан

173
Пред загрузка формы

Пред загрузка формы

Есть форма, которая загружается около 3 секундЧто бы пользователь не видел как она отрисовывается я накрыл всю форму элементом panel и выключаю...

261