Показать сообщение отдельно
Старый 06.08.2012, 19:58
greep вне форума Посмотреть профиль Отправить личное сообщение для greep Найти все сообщения от greep
  № 1  
Ответить с цитированием
greep
 
Аватар для greep

Регистрация: Jun 2002
Адрес: on the backyard
Сообщений: 285
Отправить сообщение для greep с помощью ICQ
По умолчанию Программная анимация стрелки тахометра: как описать зависимость от нажатия педали газ

Всем привет. Сегодня мне не повезло наткнуться на проблему, для решения которой мне не хватает серого вещества... Зная наверняка, что обитатели флешера, в отличие от меня, недостатком оного не страдают, решил обратиться к вам, мои дорогие.

Передо мной стоит задача сделать программную анимацию стрелки тахометра. Нажимаем газ, стрелка с замедлением ползет до определенного уровня вверх. Отпускаем газ, стрелка с равной скоростью падает вниз.

Для решения данной задачки, я вспомнил урок программной анимации эффекта скольжения/торможения.

Взял константу(коэффициент) замедления = 0.95
И шаг, на который изменяется значение угла поворота стрелки.

Получаем простейшую формулу:

шаг = шаг * 0.95
угол стрелки = угол стрелки + шаг

Каждый новый фрейм, стрелка возрастает, но различие в шаге снижается.

Если мы не успели довести стрелку до максимума и босили — она будет падать до нуля с постоянной скоростью.

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

Помогите пожалуйста разобраться... Прилагаю исходник, иллюстрирующий уровень моих познаний в программировании на АС и знания физики... А может еще и мои умственные способности.

Приведу тут же незамысловатый код, чтобы не качать исходник:

Код AS1/AS2:
 
pointer.tabSlowdown = 0.95;
pointer.rMove = 8.99;
 
 
btn.onRollOver = function(){
	pointer.onEnterFrame = function(){
		if(this._rotation > 169){
				delete this.onEnterFrame;
		}else{
				this.rMove *= this.tabSlowdown;
				this._rotation += this.rMove;
		}
	}
}
btn.onRollOut = function(){
		pointer.onEnterFrame = function(){
 
			if(this._rotation < 0){
				delete this.onEnterFrame;
				this._rotation = 0;
				this.rMove = 8.99;
			}else{
				this._rotation -= 7;
				// А вот тут нужно описать то, как переменная rMove будет увеличиваться плоть до 8.99... но как это сделать, я что-то не пойму...
			}
 
		}
}

Заранее благодарен за помощь или наводящие ответы... Очень на вас надеюсь.
Вложения
Тип файла: zip sample.zip (9.9 Кб, 91 просмотров)


Последний раз редактировалось greep; 06.08.2012 в 23:17.