Измените направление, но не скорость в простой игре - PullRequest
0 голосов
/ 13 февраля 2012

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

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

            coord = graphic.getCoordinates();
            speed = graphic.getSpeed();

    // x and y are the newly touched coordinates and 
    // getTouchedX and getTouchedY are the current coordinates
            int diffX = x - coord.getTouchedX();
            int diffY = y - coord.getTouchedY();

            int amplitude = diffX / 10;
            graphic.getSpeed().setX(amplitude);

            amplitude = diffY / 10;
            graphic.getSpeed().setY(amplitude);

1 Ответ

4 голосов
/ 13 февраля 2012

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

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

Чтобы этого не происходило, нормализуйте компоненты x и y, чтобы получить единичный вектор . Его характеристикой является то, что его величина / длина (скорость в основном) точно равна 1. Вы можете подумать об этом, указав, какой процент от общей скорости должен идти на вертикальные и горизонтальные компоненты.

* * 1010

Обратите внимание, что я изменил амплитуду на double, так как здесь использование значения int приведет к тому, что компонент будет усечен до '0' или '1' (поскольку величина вектора всегда больше, чем или равно его отдельным компонентам). Следовательно, вы можете захотеть применить коэффициент масштабирования, чтобы получить работающие значения int, хотя вы потеряете точность в процессе из-за усечения. В зависимости от коэффициента масштабирования, это может или не может привести к заметной скорости, отличающейся после прикосновения к экрану.

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