Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   возник вопрос по таймеру (http://www.flasher.ru/forum/showthread.php?t=155018)

-De- 27.04.2011 01:48

Судя по коду менять "скорость" таймера не нужно вообще (ну только изначально там поставить не 1000, а 20 или вообще таймер нафик и ENTER_FRAME), нужно менять скорость вращения этого mk =)))

optemus 27.04.2011 13:17

Цитата:

Сообщение от -De- (Сообщение 992354)
Судя по коду менять "скорость" таймера не нужно вообще (ну только изначально там поставить не 1000, а 20 или вообще таймер нафик и ENTER_FRAME), нужно менять скорость вращения этого mk =)))

итог должен быть именно таким.
но теруется достичь его именно таймером, а не увеличением mk.rotation
и большое число кадров не нужно. нужен только 1

-De- 27.04.2011 22:01

Надеюсь в курсе, что максимальная скорость вращения у вас типа 1 оборот за 7 секунд будет, если на 1 градус за тик поворот. Event.ENTER_FRAME прекрасно используется при одном кадре, грубо говоря функция слушатель его вызывается с фреймрейтом флешки, а сколько там кадров - не важно.

Cheburashka 28.04.2011 12:47

Цитата:

Сообщение от optemus (Сообщение 992348)
да вы верно подумали.
не обходимо изменять скорость на разные величины не однократно.
больше всего подходит пример с педалью газа. Частота нажатий эффекта не даст, а вот усилие.
постепенно все быстрее и быстрее

Если пример с педалью газа то реализовать это можно так:

Код AS3:

var _timer : Timer = new Timer(30);
var _acceleration : Number = 0;
var _accelerationMax : Number = 10;
var _decay : Number = 0.1;
var _rotationSpeed : Number = 0;
var _isGasDown : Boolean = false;
 
start();
 
function start() : void {
        //Подписываем кнопку газа на нажатие и отпускание
        _yourGasButton.addEventListener(MouseEvent.MOUSE_DOWN, hGasDown);
        _yourGasButton.addEventListener(MouseEvent.MOUSE_UP, hGasUp);
        // таймер пусть работает всегда
        _timer.addEventListener(TimerEvent.TIMER, hTimer);
        _timer.start();
}
 
function hGasDown($event : MouseEvent) : void {
        _isGasDown = true;
}
 
function hGasUp($event : MouseEvent) : void {
        _isGasDown = false;
}
 
function hTimer($event : TimerEvent) : void {
        // если газ нажат то ускорение увеличивается на 1 за проход, если отпущен - уменьшается на 1
        _isGasDown ? _acceleration += 1 : _acceleration -= 1;
 
        // проверяем на предельные значения
        if(_acceleration > _accelerationMax) _acceleration = _accelerationMax;
        if(_acceleration < 0) _acceleration = 0;
 
        // изменяем скорость вращения в зависимости от ускорения
        _rotationSpeed += _acceleration;
 
        // учитываем затухание
        _rotationSpeed -= _decay;
 
        // не позволяем крутиться колесу в обратном направлении.
        if(_rotationSpeed < 0) _rotationSpeed = 0;
 
        _yourWheel.rotation += _rotationSpeed;
}

Код писал на глаз, возможны ошибки.

P.S. optemus, старайтесь уходить от кода в кадрах и писать в классах.

2Sun 28.04.2011 13:09

у мышки нет слушателя для измерения усилия нажатия пользователем.
:)
Если я правильно понял ход Ваших аналогий с автомобилем, мысль такая.
Если считать увеличением усилия продолжительность нажатия на кнопку - то вызывайте функцию с таймером, которая по нажатию, который будет увеличивать значение в цикле до тех пор пока нажата кнопка и гасить его - когда она отпущена. Ну а полученное в этой функции значение передавайте в управляющий таймер или куда нибудь еще.

UPD.
Cheburashka уже даже код написал о том же. Опередил. :)


Часовой пояс GMT +4, время: 08:08.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.