мое приложение содержит объект, движущийся по поверхности. Я могу перемещать его с помощью акселерометра. Вот код движения объекта player:
if(x + mx*speed > 0 && x + mx*speed < GameView.WIDTH) {
x += mx*speed;
}
if(y+ my*speed > 0 && y+ my*speed < GameView.HEIGHT) {
y+=my*speed;
}
x и y - координаты игрока
mx - это значение, которое игрок получает от акселерометра, например: при наклоне влево mx равно -2, при большем наклоне mx равно -4, -5, -6 и т. д. --> у меня то же самое для ось Y
скорость - это переменная, которую можно изменить и поиграть, когда я хочу иметь более быстрое движение.
как вы можете видеть, я попытался ограничить движение, чтобы двигаться только тогда, когда игрок находится внутри вида.
Теперь моя проблема: при интенсивном наклоне устройства вправо mx превращается в что-то вроде 6. скорость установлена на 5. Это означает, что когда позиция игрока + 6 * 5 больше, чем вид игры, он больше не должен двигаться. . Но это приводит к тому, что игрок останавливает пиксели перед правой стороной обзора... при легком наклоне вправо объект идеально останавливается на границе обзора...
Теперь, как я должен изменить код, чтобы получить объект, который идеально останавливает свое движение на границах экрана?
На этом изображении вы можете видеть, что круг не останавливается совсем внизу, так как между кругом и нижней границей есть несколько пикселей. при небольшом перемещении назад с помощью акселерометра круг выравнивается по нижней части экрана:
Но теперь я могу достичь границ экрана только при медленном движении, что означает низкий mx или мой.
на скриншотах вы можете увидеть значения mY. На первой картинке мой = ок. 8 и на втором ок. 6.
Есть идеи?
заранее спасибо
findFirstCollision()
в GameState.java — игра продвигает мяч вперед небольшими шагами, проверяя каждый шаг. Вам это не нужно — вам нужно беспокоиться только о четырех стенах, поэтому алгебра даст ответ — но если вы добавите больше объектов для столкновения, вам может понадобиться что-то подобное. (Это также усложняется, если столкновение происходит на краю объекта, а не в центре.) - person fadden   schedule 14.02.2014