// 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--;
}
}
}
}
Отладчик в помощь. Но, судя по коду, у тебя ошибка в методе 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);
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Без команд QuickSort, без встроенных функцией, рекурсивноhttps://ru
Ситуация: загружаю два svg-документа, один из моего редактора, второй из стороннегопервый грузится как надо, информация с него считывается,...
Скачиваю файл из интернета и мне нужно отображать при этом прогресс скачивания на формеПосле скачивания прогрессбар должен быть спрятан
Есть форма, которая загружается около 3 секундЧто бы пользователь не видел как она отрисовывается я накрыл всю форму элементом panel и выключаю...