проблема определения границы для моего спрайта в XNA - PullRequest
0 голосов
/ 07 марта 2011

Я только начал заниматься разработкой игр и XNA, следовал руководству и решил попытаться добавить ограниченную область для пола.В этом уроке спрайт мог свободно перемещаться, и я хотел, чтобы у него была точка остановки, поэтому я добавил инструкцию к части метода ввода

if (aCurrentKeyboardState.IsKeyDown(Keys.Down) == true)
            {
                if (this.Position.Y == 420)
                {
                    MOVE_DOWN = 0;
                    mDirection.Y = MOVE_DOWN;
                }

                else
                {
                    mSpeed.Y = PLAYER_SPEED;
                    MOVE_DOWN = 1;
                    mDirection.Y = MOVE_DOWN;
                }


            }

MOVE_DOWN - моя переменная для изменения y, если= 0, движения нет, 1 - вниз, -1 - вверх.это работало, только если позиция границ (420) была равна позиции, в которой мой спрайт начинался, за исключением того, что он не работает.

Я думаю, что это потому, что позиция не обновляется правильно.Я не знаю, я много чего пробовал, и я довольно новичок в разработке XNA и игр.Любая помощь будет принята с благодарностью.

Вот метод обновления для моего спрайта игрока

 public void Update(GameTime theGameTime)

    {

        KeyboardState aCurrentKeyboardState = Keyboard.GetState();



        UpdateMovement(aCurrentKeyboardState);




        mPreviousKeyboardState = aCurrentKeyboardState;



        base.Update(theGameTime, mSpeed, mDirection);

    }

, а вот обновление для базового класса

public void Update(GameTime theGameTime, Vector2 theSpeed, Vector2 theDirection)
    {
        Position += theDirection * theSpeed * (float)theGameTime.ElapsedGameTime.TotalSeconds;
    }

1 Ответ

0 голосов
/ 07 марта 2011

Если «Position» - это Vector2, то он использует плавающие компоненты X & Y.

В практических целях число с плавающей точкой редко будет равняться целому числу из-за ошибок округления с плавающей запятой.

if (this.Position.Y == 420)//will never return true

следует изменить на:

if (this.Position.Y < 420)
{
   this.Position = 420;
   //other stuff you have
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...