Для начала, вы могли бы двигаться
mouseStateCurrent = Mouse.GetState();
if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
{
if (mouseStatePrevious.LeftButton != ButtonState.Pressed)
{
AddProjectile(player.positionPlayer);
mouseStatePrevious = mouseStateCurrent; //<-- This line
}
}
//<-- Here
После того, как вы нажмете свою кнопку, вы никогда не введете это, если снова.
Редактировать 1
Кроме того,это в вашем Снаряде
Player playerObject = new Player();
Game1 gameObject = new Game1();
должно выглядеть следующим образом:
Player playerObject;
Game1 gameObject;
public Projectile(Player player, Game1 game)
{
playerObject = player;
gameObject = game;
}
Поскольку вы используете их только для получения пункта отправления и назначения пули, было бы лучше, если бы выпросто вычислил их снаружи и передал с инициализацией.(поскольку это избавило бы Projectile от необходимости знать, как выглядят объекты Game1 и Player)
Вы также можете полностью удалить метод Initialize и просто использовать конструктор Projectile, что кажется более естественным.(если вы используете конструктор для этого, то вы знаете, что каждый раз, когда у вас есть экземпляр, вы можете использовать его без необходимости вызова дополнительных методов)
Небольшое редактирование
Я не думаю,Вы действительно нуждаетесь в bulletOrigin в своем классе Projectile, вы можете просто использовать позицию и переместить ее оттуда в bulletDestination.
Кроме того, класс Vector2 сделан с перегруженными операторами методами, поэтому вы можете использовать
positionBullet += directionLine*velocity;
вместо
positionBullet = Vector2.Add(positionBullet, directionLine * velocity);
Кроме них, ваш код выглядит нормально!Скажите, не работает ли он после этих изменений.Кроме того, используйте ваш отладчик, чтобы войти в него, посмотрите, сможете ли вы найти что-нибудь интересное.:)