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

У менять есть подробное описание проблемы вот тут: Документ

Там можно оставлять комментарии, и можно тут )

Дополнение: Когда нажимаешь на область справа от ракетки, она должна двигаться туда с начальной скоростью, которая равномерно затухает до полного торможения при достижении цели.

p.s. Надеюсь вопрос по адресу )

задан 12 Фев '13 11:45

Для начала, входные данные немного не такие. Текущая скорость ракетки также является входным данным, так как пользователь может выбрать новую цель в тот момент, когда ракетка уже двигается. А ширина ракетки, как раз, не является входным данным. В том смысле, что она ни на что не влияет, так как Вам, как я полагаю, надо к цели прийти центром ракетки.
Что касается методов решения поставленной задачи, то можно составить с десяток возможных вариантов решения, в зависимости от некоторых подробностей вашего игрового мира. Для случая, когда ускорение и скорость ракетки ограничены значениями $%A$% и $%V$%, соотв., введем переменные $%t_1$%, $%t_2$%, $%t_3$% - время движения с положительным ускорением, с максимальной скоростью без ускорения и с отрицательным ускорением. Разобрать два случая.
Первый случай: мы не успеваем разогнаться до максимальной скорости, т.е. $%t_2=0$%. Получаем: $$\begin{cases} x_1=x_0+v_0t_1+\frac{At_1^2}2\\ v_1=v_0+At_1\\ x_3=x_1+v_1t_3-\frac{At_3^2}2\\ v_3=v_1-At_3\\ x_3=x_{ЦЕЛИ}\\ v_3=0 \end{cases}$$ Решив эту систему, получим некоторые значения $%t_1$% и $%t_3$%. Если получилось, что $%v_1\gt V$%, значит максимальная скорость превышена и надо рассмотреть второй случай, когда мы движемся некоторое время с максимальной скоростью: $$\begin{cases} x_1=x_0+v_0t_1+\frac{At_1^2}2\\ v_1=v_0+At_1\\ v_1=V\\ x_2=x_1+Vt_2\\ v_2=V\\ x_3=x_2+v_2t_3-\frac{At_3^2}2\\ v_3=v_2-At_3\\ x_3=x_{ЦЕЛИ}\\ v_3=0 \end{cases}$$ Решив эту систему, получим некоторые значения $%t_1$%, $%t_2$% и $%t_3$%.
Если любое из $%t_i$% оказалось отрицательным, значит надо двигаться сначала с отрицательным ускорением, а затем с положительным. Тут надо будет составить аналогичные уравнения, только с ускорениями в другую сторону. Думаю, для Вас это не составит особого труда.
Если ракетка должна двигаться и горизонтально, и вертикально, то рассчет для двух осей производится независимо.

отвечен 12 Фев '13 19:29

Вот еще функция (язык Blitz3D Basic), которая принимает на вход положение цели относительно ракетки и текущую скорость ракетки, а возвращает необходимое ускорение:

Function f#(x#, v#)
  If x < 0 Then Return -f(-x, -v)
  If v < 0 Then Return A
  If v ^ 2 < 2 * A * x Then Return A
  Return -A
End Function

В прочем, я, когда делал подобную игру, использовал другую модель :)

(12 Фев '13 19:45) chameleon

Здравствуйте

Физика - это совместно редактируемый форум вопросов и ответов по естественным наукам для физиков, химиков, астрономов и биологов.

Присоединяйтесь!

отмечен:

×19
×6

задан
12 Фев '13 11:45

показан
1833 раза

обновлен
12 Фев '13 19:45

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

Дизайн сайта/логотип © «Сеть Знаний». Контент распространяется под лицензией cc by-sa 3.0 с обязательным указанием авторства.
Рейтинг@Mail.ru