![]() |
Как реализовать движение обьекта с настройкой его скорости
Здравствуйте, казалось бы глупый вопрос, но загнал меня в ступор. Фреймрейт приложения 25 кадр/сек. Есть мувиклип человечка, в кадрах которого движение (перемещаются руки и ноги - типа идет). По клику этот чувак перемещается из точки А в точку Б с постоянной скоростью. Но необходимо сделать фичу чтобы пользователь мог сам настраивать скорость человечка перед началом каждого движения. Как думаю я:
1. Движение по enterFrame. Сдвигать обьект на некоторое расстояние, зависящее от framerate и вызывать nextFrame() человечка. Скорость постоянная - плавная, обьект перебирает ногами плавно. Если пользователь удваивает скорость - изменяю framerate на 50. То же самое, но обьект перемещается в пространстве в 2 раза быстрее и перебирает ногами в два раза быстрее. Но такой высокий framerate для приложения нежелателен. Анимации много - может тупить. 2. Движение по timer. Запускаю таймер со скорость 25 раз/сек. В каждой итерации сдвигаю обьект на некоторое расстояние и вызываю nextFrame() обьекта. Скорость постоянная - плавная, обьект перебирает ногами плавно. Если пользователь удваивает скорость - изменяю скорость таймера на 50 р/сек. Но здесь проблема - framerate в два раза ниже. Пока произойдет перерисовка кадра - nextFrame() человечка выполнится два раза и обьект переместится на два отрезка. И пользователь не увидит промежуточные кадры человечка, а увидит рывки. Подскажите, пожалуйста, может есть третий способ, как лучше здесь поступить? |
Управление анимацией персонажа - отдельный интерфейс. При значительном увеличении скорости (в кратное или близкое ему значение: х2, х3, х4...) - перепрыгивать через кадры соответственно кратности.
А движение самого объекта - хоть enter_frame-ом, хоть твинером, не принципиально. |
Спасибо. Перекурив - понял, что без изменения фреймрейта нельзя прокрутить анимацию, не схавав некоторые кадры...
|
менять фрэймрэйт - плохая идея, а вот менять частоту обновления картинки нужных объектов (персонажей) - самое то будет
|
Цитата:
|
Картинка по определению не должна перерисовываться чаще, чем фрэймрэйт самого приложения, который нет смысла выставлять выше 31 (я обычно ставлю 30). Т.е. возможно только урежение смены картинки. Происходить это будет на основе кадров мувиклипов или сиквенции изображений не принципиально.
Допустим имеем дело с мувиками и покадровой анимацией. К примеру необходимо проиграть анимацию в 3 раза реже. Экземпляр класса персонажа должен иметь какой-то метод, типа Код AS3:
В отношении передачи такого параметра все еще проще. По ENTER_FRAME-у (или таймеру) делаем инкремент некоей переменной, которую передаем в качестве аргумента методу update вашего персонажа. Инкремент будет зависеть от кртаности. Т.е. если необходимо замедлить скорость проигрывания анимации в 3 раза, то выглядеть будет примерно так: Код AS3:
|
Спасибо, с этим проблем нет. Такая задача легко решается. Просто из ваших слов:
Цитата:
|
| Часовой пояс GMT +4, время: 01:21. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.