Изменение положения XNA с помощью Math.Sin - PullRequest
0 голосов
/ 20 февраля 2012

Мне было интересно, почему мой код не работает полностью.

        int sinval = (int)Math.Sin(gameTime.ElapsedGameTime.TotalSeconds) * 100;
        mSprite.Position += (new Vector2(5 * sinval, 0));

У меня есть это в моем методе обновления, и на самом деле я просто хотел какое-то доказательство концепции. Во всяком случае, то, что я хотел сделать, это просто немного колебаться по оси X. Но по какой-то причине он добавляет синваль только один раз в начале, поэтому каждый раз, когда я изменяю одно из значений в этом коде, у него появляется новая начальная позиция, но это все.

У меня это тоже есть в методе обновления.

Новый код:

        int sinval = (int) (Math.Sin(gameTime.ElapsedGameTime.TotalSeconds) * 61);
        mSprite.Position += (new Vector2(25 * sinval, 0));

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012

Вы округляете результат Math.Sin до целого числа. В почти всех случаях это даст 0. Math.Sin возвращает -1 и 1 для -Math.PI / 2 и Math.PI / 2 соответственно ... но во всех других случаях это даст 0 после округления до 0.

Вы имели в виду округление до целого числа после умножения на 100?

int sinval = (int) (Math.Sin(gameTime.ElapsedGameTime.TotalSeconds) * 100);
0 голосов
/ 20 февраля 2012

Math.Sin() всегда между -1 и 1.
Приведение этого к int всегда возвращает 0.

Вы хотите разыграть после умножения на 100.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...