Почему мои снаряды не нарисованы на экране? - PullRequest
1 голос
/ 16 января 2012

Итак, я разрабатываю простую программу на C #, которая позволяет вам перемещаться по графике и запускать пули, которые перемещаются от игрока к позиции мыши во время щелчка мышью. Я все еще новичок в C #, но имею некоторый опыт работы с Java и Python.

Я полностью могу перемещать своего персонажа с помощью WASD, но не могу получить пули, которые можно нарисовать, не говоря уже о том, чтобы заставить их двигаться по мере обновления.

Где может быть ошибка?

Метод рисования снаряда? Метод обновления класса Game1 для пользовательского ввода? Установка направления объекта снаряда?

Вот полный код: http://pastebin.com/j5QVLKU3

Я пропустил класс игрока, но в нем нет ничего, кроме нескольких переменных игрока, таких как здоровье.

1 Ответ

6 голосов
/ 16 января 2012

Для начала, вы могли бы двигаться

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);

Кроме них, ваш код выглядит нормально!Скажите, не работает ли он после этих изменений.Кроме того, используйте ваш отладчик, чтобы войти в него, посмотрите, сможете ли вы найти что-нибудь интересное.:)

...