Просмотр полной версии : Неправильный эффект
Mr. Fixit
10.09.2007, 20:24
import flash.filters.DropShadowFilter;
import mx.utils.Delegate;
class Butt {
private var shadowFilter:DropShadowFilter;
private var _mc:MovieClip;
private var frame:Number;
public function Butt (_mc:MovieClip, frame:Number, __x:Number, __y:Number) {
_mc._x = __x;
_mc._y = __y;
shadowFilter = new DropShadowFilter (10, 45, 0x000000, 1, 6, 6, 1, 3, false, false, false);
_mc.filters = [shadowFilter];
this._mc = _mc;
this.frame = frame;
_mc.onPress = Delegate.create (this, onPressing);
}
private function onPressing ():Void {
gotoAndStop (frame);
_mc.filters = [shadowFilter];
}
}
вот класс для эффектов кнопок, при переходе на другой кадр класс как-то неправильно работает, почему??
А то я уже думаю, что это проблема не в классе, а в самом восрпиятии Флеша((
import flash.filters.DropShadowFilter;
import mx.utils.Delegate;
class Butt {
private var shadowFilter:DropShadowFilter;
private var _mc:MovieClip;
private var frame:Number;
public function Butt (_mc:MovieClip, frame:Number, __x:Number, __y:Number) {
_mc._x = __x;
_mc._y = __y;
shadowFilter = new DropShadowFilter (10, 45, 0x000000, 1, 6, 6, 1, 3, false, false, false);
_mc.filters = [shadowFilter];
this._mc = _mc;
this.frame = frame;
_mc.onPress = Delegate.create (this, onPressing);
}
private function onPressing ():Void {
_mc.gotoAndStop (frame);
_mc.filters = [shadowFilter];
}
}
Mr. Fixit
10.09.2007, 20:58
я не об этом.. тяжело обьяснить. Попробуйте практикой и увилите в че проблема. Создайте как минимум 3 кнопки.
Об этом или нет, но gotoAndStop (frame) у меня на указанный кадр _root переводит, вместо мувика, который в нем лежит.
Создал три мувика, передал их в качестве параметра конструктру и... все нормально =) Что должно произойти?
PS: было бы неплохо, если такие вопросы задаются, выкладывать готовый пример, чтобы сразу можно было скачать его и потестить, без лишних усилий.
Mr. Fixit
10.09.2007, 21:15
Почему DropShadowFilter изменяется?? Как сделать, что бы он не изменялся при переходе на фрейм?
вот пример:
можно конечно обойти "нагружаемым путем", это в каждом фрейме писать такой код:
stop(); // только в первом, остальное во всех четырех
import Butt;
var b1:Butt = new Butt(mc1, 1, 50, 30);
var b2:Butt = new Butt(mc2, 2, 50, 90);
var b1:Butt = new Butt(mc3, 3, 50, 150);
var b2:Butt = new Butt(mc4, 4, 50, 210);
Но так наверно, создает нагрузку на ЦП. Да и неправильно как-то смотриться.
Немогу понять почему так происходит... Если двигаемся вперед, то все нормально, как только нажимаем на предыдущую кнопку -- все фильтры сносятся, у все кнопок. Или это какой-то баг или чего-то я не знаю.
Mr. Fixit
10.09.2007, 22:07
слышал принцип, что:"Код существует только в одном кадре, при переходе на другой он уничтожается".
Если нельзя как-то решить эту проблему, то прийдется пользоваться кодом, который приведен мной выше.
update:
Блинин, такой способ совершенно не катит. Если другого выбора нету, то прийдеться вообще не использовать фреймы.
Если есть другой выход, прошу гуру рассмотреть даную проблему, и подсказать метод ее решения.
Никогда и ничего нельзя сваливать на флеш. Нужно сваливать все на собственный кривой код.
Mr. Fixit
10.09.2007, 22:26
В чем он кривой?
Если что-то работает не так, как задумывалось, то флеш виноват лишь в 0,001% случаев, я вот к чему.
Mr. Fixit
10.09.2007, 22:40
=) посмотри, если тебе не тяжело, как решить мою проблему.
Нужно вынести клипы на положительные глубины, например, this._mc.swapDepths(frame) в конструкторе.
__etc, не мог бы ты объяснить, почему так нужно делать?
Потому что указанные клипы не являются клипами, созданными программно и на них (точнее на глубины, в которых они лежат) действуют условия таймлайна. Для того, чтобы не действовали, нужно выносить на свою глубину.
Mr. Fixit
11.09.2007, 02:16
все равно тоже самое, даже хуже(((
Mr. Fixit, у меня заработало, кстати, так. Вот только я не понял про "действуют условия таймлайна", что там именно за условия, что такая чертовщина творится.
Ну не сказать, что чертовщина. Условия таймлайна — это те свойства, которые привязаны к конкретной глубине клипа, туда же входят фильтры и т.д.
Mr. Fixit
11.09.2007, 02:28
udaaff, а вы покликайте на разные кнопки, в разном порядке. И смотрите эффект.
Как же решить трабл? И он вообще решается??
udaaff, а вы покликайте на разные кнопки, в разном порядке. И смотрите эффект.
Как же решить трабл? И он вообще решается??
После указанных мною действий никаких «неожиданностей» не возникает.
Mr. Fixit
11.09.2007, 02:41
ты проверял?
елси ты прав, приведи плиз код...
17689 Если на первую не кликать, то все как и должно быть.
Mr. Fixit
11.09.2007, 03:09
в моем проекте все намного хуже, так как я упростил пример.
Все-таки думаю, выход один: не использовать в даном случае фреймы и все.
Не надо переходить в тот кадр, где кнопки инициируются, вот и все. Тогда и шаманство не потребуется.
upd: не без шаманства, если уровень не менять, на обратном проходе фильтры слетают.
Mr. Fixit
11.09.2007, 03:42
((( все-равно в моей обьемном приеме, трясутся кнопки при такой раскладе. Стоит убрать функцию перехода на кадры, и все просто чудно!
Наверно тогда не буду в даном проекте использовать кадры, где находятся кнопки...
вот как выглядит нормально,
и как с использованием фреймов(криво и трясется)
ты проверял?
елси ты прав, приведи плиз код...
Ты считаешь, что я такой идиот и не проверил?
import flash.filters.DropShadowFilter;
import mx.utils.Delegate;
class Butt {
private var shadowFilter:DropShadowFilter;
private var _mc:MovieClip;
private var frame:Number;
public function Butt (_mc:MovieClip, frame:Number, __x:Number, __y:Number) {
_mc._x = __x;
_mc._y = __y;
shadowFilter = new DropShadowFilter (10, 45, 0x000000, 1, 6, 6, 1, 3, false, false, false);
_mc.filters = [shadowFilter];
this._mc = _mc;
this._mc.swapDepths(frame);
this.frame = frame;
_mc.onPress = Delegate.create (this, onPressing);
}
private function onPressing ():Void {
_mc._parent.gotoAndStop (this.frame);
}
}
stop();
import Butt;
if (!init) {
var b1:Butt = new Butt(mc1, 1, 50, 30);
var b2:Butt = new Butt(mc2, 2, 50, 90);
var b1:Butt = new Butt(mc3, 3, 50, 150);
var b2:Butt = new Butt(mc4, 4, 50, 210);
init = true;
}
aQuestion
11.09.2007, 13:03
а раком пробовали?...
this._mc.onEnterFrame = Delegate.create (this, onEnterFrame);
}
private function onEnterFrame ():Void {
this._mc.filters = [shadowFilter];
}:D :D :D
Mr. Fixit
11.09.2007, 15:00
aQuestion
зачем такой бред делать??
_etc
:drinks:
chudesno
11.09.2007, 16:52
Ну можно запомнить все _mc в статическом массиве и вешать фильтр заново каждый раз на все.
Хотя интересно все-таки, из-за чего они сносятся :)
aQuestion
11.09.2007, 16:53
а нужна причина?
chudesno
11.09.2007, 16:56
та все уже))
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.