Я работаю над простой 2-й игрой. Я делаю линейную анимацию движения изображения по разным направлениям.Движущаяся анимация, включающая ускорение/дециберация
Функция для перемещения изображения (move_to_right
) требует 2 параметра
Distance
: Общее расстояние, пройденноеDuration
: Продолжительность чтобы покрыть это расстояние
Класс, который держит изображение имеет эти переменные, необходимые для выполнения линейных движений:
distance_total
: хранить общее расстояние (берется из параметра «расстояние»)frame_total
: хранит необходимо всего кадра (взятые из «длительность» параметра)frame_spent
: сколько кадров, передаваемых во время анимацииspeed
: как многие из пикселей изображения шаг для каждого кадра, первоначально 0- основные переменные изображения, такие как X, Y координаты, ширина, высота и т.д.
грубый код:
class Animated
def initialize
#all things needed to show a picture properly in the screen along with its properties such as x, y coordinates.
end
def move_to_right (distance,duration)
@distance_total = distance
@frame_total = duration
@frame_spent = 0
@speed = @distance_total/@frame_total
#the animation runs in game's loop, but for this time, to make it simple and easy to understand, I'll just use while statement
while @frame_spent <= @frame_total
self.x += @speed
@frame_spent += 1
end
end
end
$test = Animated.new
$test.move_to_right (100,60)
Эти коды работают хорошо, но это все, просто простая анимация движения. Изображение перемещается 100 pixel
вправо in 60 frames
НО
Теперь мне нужно динамическое движение, которое включает в себя ускорение/замедление, вот сценарий:
- первый 30% от продолжительности включает ускорение. Скорость начинается с 0 и поднимается от кадра к кадру
- следующие 40% длительности срабатывания линейное движение. Скорость постоянна и не изменяется
- последние 30% длительности включает decceleration. Скорость начинается с последней скорости линейного перемещения и падает от кадра к кадру, пока, наконец, не остановится.
- Этот сценарий не должен оказывать какое-либо влияние на общее расстояние и продолжительность. Это означает, что все это должно покрывать 100 пикселей в 60 кадрах.
Вопросы: 1. Какие переменные необходимы для выполнения вышеуказанного сценария? Для чего они используются? 2. Какие шаги? Если вы можете, пожалуйста, также укажите уравнение/расчет, чтобы сделать его понятным
Вам не обязательно отвечать на коды; текстовые объяснения или направление будут большой помощью. Существует никаких ограничений по языку, поэтому, если вы хотите помочь в использовании кода на любом языке, это абсолютно нормально.Заранее спасибо :)
Если это код для определенного языка, вы должны добавить [подсветку синтаксиса] (http://meta.stackexchange.com/questions/981/syntax-highlighting-language-hints). – Dukeling