#разработка_игр #алгоритм #java
Пишу игру и нужно рассчитать траекторию полета пули. Пишу для тачскрина и траектория создается в зависимости от точки касания, позиции пальца на экране, но получается что работает только на вторые 45 градусов из первой половины экрана, вот как выглядит. А мне нужно, что бы стреляло в любую точку. Помогите, пожалуйста, как рассчитать? Вот как я сделал, что бы оно так летало: angle = Math.atan((y - gameView.shotY) / (x - gameView.shotX)); //позиция начальная - координата косания x = (int)(x + xSpeed * Math.cos(mAngle)); y = (int)(y + ySpeed * Math.sin(mAngle)); Достиг того эффекта, а нужно что бы равномерно летело. Заранее спасибо!
Ответы
Ответ 1
У меня выдавало странные результаты пока не конвертнул тип данных для x, y к double. проблема в неявном конвертировании типов в первой формуле. попробуй так: angle = Math.atan ( (double) (y - viewY) / (x - viewX) ) ; UPDATE: что, где, когда: Если я правильно понял то происходит следующее (y - viewY) и (y - viewY) int. При делении результат неявно конвертируется к типу int (здесь и отрезается дробная часть). После чего он неявно конвертируется к типу double для передачи в функцию atan. проверить можно так: System.out.println ( 5 / 3 ) ; System.out.println ( (double) 5 / 3 ) ;Ответ 2
Помимо angle = Math.atan ( (double) (y - viewY) / (x - viewX) ) ; надо (int) заменить Math.round x = Math.round(x + xSpeed * Math.cos(mAngle)); y = Math.round(y + ySpeed * Math.sin(mAngle));
Комментариев нет:
Отправить комментарий