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

Byrger 21.07.2010 21:42

Управление тенью
 
У Фрагмента ролика можно настроить фильтр такое как тень

Есть к примеру квадрат у которого есть тень

Можно ли на AS написать код чтоб когда наводишь на этот квадрат то на сторону или угол на который навел опускался а противоположный соответственно поднимался
А когда в центр то равновесие

SunShadow 22.07.2010 07:44

Написать можно что угодно, только от постановки задачи и мозгов программиста зависит на сколько это будет сложно реализовано. А из вашего объяснения цели уважаемый не ясно чего вы хотите добиться. Чтобы тень смещалась при движении курсора мыши над квадратом?

Жень Шень 22.07.2010 13:33

Цитата:

К фрагменту ролика нужно применить фильтр, типа тень.
Есть, к примеру, квадрат. Можно ли ... и т.д.
Примерно так можно:
Код AS3:

import flash.text.TextField;
import flash.filters.*;
import flash.events.*;
var filter:DropShadowFilter;
var constanta = 180/Math.PI;
mc_mc.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
mc_mc.addEventListener(MouseEvent.MOUSE_OUT,  mouseOutHandler);
function mouseMoveHandler(e:MouseEvent):void {
        var dx = mc_mc.mouseX;
        var dy = mc_mc.mouseY;
        var z = Math.sqrt(dx*dx+dy*dy)/5;
        var angle = Math.atan2(-dy, -dx)*constanta;
          filter = new DropShadowFilter (z, angle);
        mc_mc.filters = [filter];
}
function mouseOutHandler(e:MouseEvent):void {
        mc_mc.filters = null;
}

Только в следующий раз пишите без ошибок и со знаками препинания.

PS
Да, на сцену поместите клип mc_mc

enepx 22.07.2010 13:44

Думаете правильно так писать? :)
Код AS3:

filter = new DropShadowFilter (z, angle)

Лучше создать экземпляр DropShadowFilter один раз, поместить его в filters один раз, при MOUSE_MOVE менять только свойства экземпляра DropShadowFilter.

-De- 22.07.2010 14:04

Цитата:

Сообщение от enepx (Сообщение 924102)
Лучше создать экземпляр DropShadowFilter один раз, поместить его в filters один раз, при MOUSE_MOVE менять только свойства экземпляра DropShadowFilter.

enepx, да, но при этом видимая тень меняться не будет)
Опытным путём установлено, что кроме изменения свойств DropShadowFilter необходимо вызывать геттер filters , т.е.
Код AS3:

mc_mc.filters = [filter];

Ну и там вродь можно сразу и массив содержать, чтоб его не пересоздавать т.е.
Код AS3:

mc_mc.filters = myConstantFiltersArray;

Похоже, при этом также происходит копирование обьекта DropShadowFilter. Если известно, как проще, то очень интересно знать =)

enepx 22.07.2010 14:09

Странно, я вроде менял фильтры без переприсваивания filters, но может и ошибаюсь.

Hidest 22.07.2010 21:33

Все правильно, фильтр надо всегда заново применять, чтобы изменение отобразилось!

Byrger 22.07.2010 22:59

Извиняюсь видимо меня не так поняли...
Тень немного не так должна сдвигаться

Нужно чтоб квадрат висел в воздухе допустим на 20px
Соответственно от него идет тень...
Ногда наводишь на любой его край, этот край опускается допустим 5px к фону...

enepx 22.07.2010 23:07

То же самое, только при MOUSE_ROLL_OVER меняйте ShadowFilter.distance и переприсвойте массив filters.

Byrger 22.07.2010 23:19

не пойму как сделать чтоб 1 угол опускался а другой поднимался
чтоб каквы этот квадрат был в 3д и висел над фоном

Wolsh 22.07.2010 23:37

Фильтр не дает 3D тени. Делай тень отдельным спрайтом, черный прямоугольник с фильтром блюр. Возможно также перерисовывать его с градиентной прозрачностью.


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

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