Форум 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=158348)

bestchetnova 18.06.2011 14:30

Увеличение по событию мыши и срабатывание по времени
 
Здравствуйте, уважаемые,
подскажите, пожалуйста, новичку - написала код для случая: курсор мыши подносится - картинка увеличивается, курсор отодвигается - картинка возвращается в первоначальное положение

Код AS3:

obj.addEventListener (MouseEvent.MOUSE_OVER, zooming);
function zooming (e:MouseEvent):void{
    obj.scaleX+=1;
    obj.scaleY+=1;
}
obj.addEventListener (MouseEvent.MOUSE_OUT, antizooming);
function antizooming (e:MouseEvent):void{
    obj.scaleX-=1;
    obj.scaleY-=1;
}

Но увеличивается она не из центра, а как-то вбок, чего не хватает?

И совсем неодолимый вопрос - как сделать, чтобы процесс происходил в любом случае, даже если курсор не двигается. Например, через 7 сек бездействия мыши зум запускается автоматически, длится 3 сек и устраняется автоматически, снова на 7 сек. Подозреваю Timer, но что и куда?

Wolsh 18.06.2011 14:50

Для оформления своего кода надо использовать теги [code][/code]
У картинки как и любого объекта на дисплее есть координаты, а именно координаты точки привязки, которая всегда находится в верхнем левом углу объекта. Высота и ширина увеличиваются только в положительную область - то есть вправо и вниз. Для имитации изменения размера из центра Вам придется также смещать картинку в отрицательную область на половину прироста размера.
Про Timer.. ну сначала в хелпе почитайте, потом спросите, что не получается конкретно.

bestchetnova 18.06.2011 17:05

Спасибо, что так быстро.
Про теги поняла.
Про Timer имела ввиду - как программным языком поставить условие "Если мышь неактивна n сек, то..." Пошла читать хелп в любом слу

TanaTiX 18.06.2011 17:44

MouseEvent.MOUSE_MOVE - событие движения мыши. Соответственно когда не срабатывает - запускать таймер на n секунд, иначе сбрасывать.

bestchetnova 18.06.2011 18:11

спасибо, теперь буду долго думать своим филологическим мозгом)

S-ed 18.06.2011 18:44

Справедливо для Flash IDE:
Точку привязки("псевдо") можно установить при создании объекта (одно из 9 положений).
Объект можно переместить оносительно точки привязки (ручками двигаете и все).
Масшатб работает во все стороны от точки привязки (как я понял, иде сама генерит ту часть кода, которая смещает "псевдоцентр" при всех преобразованиях.
Код AS3:

var myTimer:Timer = new Timer(1000, 0); /*создаем таймер с интервалом
 в 1000 миллисекунд и бесконечной цикличностью (0)*/

addTimer();
 
function addTimer() {
        myTimer.addEventListener(TimerEvent.TIMER, timerHandler); /*листенер,
который будет вызывать функцию timerHandler как только таймер отсчитает
 необходимое время*/

        myTimer.start(); //запускаем таймер
}
 
function removeTimer() {
/*вызов функции прекратиться при люом из этих 2х запросов,
но для экономии ресурсов, лучше вызвать оба*/

        myTimer.removeEventListener("timer", timerHandler);/*удаляем
листенер*/

        myTimer.reset();//сбрасываем счетчик на 0 и останавливаем
        таймер, иначе он будет продолжать в фоне*/
}
 
obj.addEventListener (MouseEvent.MOUSE_OVER, zoomIn);
obj.addEventListener (MouseEvent.MOUSE_OUT, zoomOut);
 
function zoomOut (e:MouseEvent):void{
        zoomObj('out');
        addTimer();/*добавляем таймер когда курсор
 покидает объект*/

}
 
 
function zoomIn (e:MouseEvent):void{
        removeTimer();/*удалаем таймер на время пока
 курсор над объектом*/

        zoomObj('in');
}
 
function zoomObj(zoomMode:String = 'out'):void{
        if(zoomMode == 'in'){
                obj.scaleX = obj.scaleY = 2;
        }else{
                obj.scaleX = obj.scaleY = 1;
        }
}
 
function timerHandler(event:TimerEvent):void {
/*считаем такты счетчика, и разбиваем их на интервалы по 10 (3 и 7 секунд),
 если их больше 3, то увеличиваем, в противном случае уменьшаем*/

        if(event.target.currentCount % 10 >= 3){
                zoomObj('in');
        }else{
                zoomObj('out');
        }
}
 
//пользуйтесь табом, его промежуток равен 4 пробелам (у большинства)

p.s.: простите если код немного кривой...думаю, более грамотные люди поправят

bestchetnova 18.06.2011 19:55

ух ты, спасибо большое! сейчас буду разбираться:)

GBee 19.06.2011 11:32

Можно воспользоваться твинером каким-нибудь, чтобы не возиться с таймером.

S-ed 19.06.2011 13:03

GBee
Приведенный код не претендовал на грамотность. Да и код без использования классов... Но твинер требует отделных либ, или много кода.

GBee 19.06.2011 13:55

S-ed, к вашему коду претензий не имею (ну почти не имею), я просто предложил альтернативу. Хорошие дополнительные библиотеки много веса не прибавят, а работу могут ускорить и облегчить.


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

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