![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
1. У меня в этом примере движок имел постоянные размеры. Но допустим Вы это изменили, нетрудно.
2. При любом ресайзе маски Вам недостаточно будет менять высоту скроллера и размер движка. Должно измениться и положение движка, т.к. изменилась длина трека, при этом текст должен остаться там, куда он был проскроллирован. 3. Скроллер проще просто удалить и приаттачить/настроить заново. Расчет куда поставить движок чтобы текст остался на месте придется делать в любом случае, зато не придется дублировать половину кода в функцию ресайза)
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 89
|
Согласен, что одини из вариантов просто удалять скроллер и создавать снова, но тогда придется писать callBack у onResize маски, ибо скроллер должен создаваться после изменения маски, кот. возникает например из-за изменения размеров сцены.
А это уже начинает становиться грамоздко. А если еще допустить что на ресайз маски должно выполняться еще что-то, то тогда вообще придется писать отседльную внешнию функцию, содержащуу все действия (включая удаление/перересовку скроллера), кот. должны выполняться при ресайзе маски. ИМХО было бы проще просто слушать разными классами этот ресайз... |
|
|||||
|
Banned
[+5 15.02.09]
[++5 15.02.09] Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
|
Зато понавешать множество ненужных диспетчеров это круто...
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
|
Modus ponens
|
EventDispatcher лучше тем, что не диктует как называть функцию слушателя, т.е. на событие можно подписать сколько угодно разных функций, пусть они даже являются методами одного и того же объекта. А события в свою очередь можно унифицировать, и не путаться в их названиях (т.е. пример, я хочу, чтобы клип А слушал онРесайз от клипа Б, в случае с АсБроадкастером мне нужно будет разослать всем подписчикам сообщение и это сообщение будет именем вызываемого метода т.е. если у меня в клипе А уже есть функция онРесайз, то ее все равно вызовут (а я могу даже не знать/не помнить, что клип Б будет высылать клипу А это событие или случайно назвать свою функцию так же, как и высылаемое событие - более вероятная ситуация).
Конечно, есть флешевский EventDispatcher (mх.utils.EventDispatcher), но я пользуюсь своим. Вот, мб пригодиться =) Я не претендую на непогрешимость, и возможно мое творение не лучее решение, но, пока что работает и я доволен: /**
* ...
* @author wvxvw
*/
import events.Event;
class events.EventDispatcher
{
private var _eventListeners:Array;
public function EventDispatcher()
{
_eventListeners = [];
}
public function addEventListener(evt:String, fn:Function, ob:Object):Void
{
_eventListeners.push( { e:evt, f:fn, o:ob } );
}
public function removeEventListener(evt:String, fn:Function, ob:Object):Function
{
var i:Number = 0;
var l:Number = _eventListeners.length;
var obj:Object;
for (i = 0; i < l; i++)
{
obj = _eventListeners[i];
if (obj.e != _eventListeners[i].e) continue;
if (obj.f != _eventListeners[i].f) continue;
if (obj.o != _eventListeners[i].o) continue;
return _eventListeners.splice(i, 1)[0].f;
}
}
public function dispatchEvent(evt:Event):Void
{
var i:Number = 0;
var l:Number = _eventListeners.length;
var obj:Object;
for (i = 0; i < l; i++)
{
if (evt.type != _eventListeners[i].e) continue;
evt.target = this;
_eventListeners[i].f.apply(_eventListeners[i].o, [evt.clone()]);
}
delete evt;
}
}
/**
* ...
* @author wvxvw
*/
import utils.Utils
class events.Event
{
private var _target:Object = null;
private var _type:String = 'default';
public var className:String = 'Event';
public function Event(s:String)
{
if (s) _type = s;
}
public function clone():Event
{
var evt:Event = new Event(_type);
evt.target = _target;
return evt;
}
//------- get/set ------------//
public function set target(o:Object):Void
{
if (_target == null) _target = o;
}
public function get target():Object
{
return _target;
}
public function set type(s:String):Void
{
return;
}
public function get type():String
{
return _type;
}
public function toString():String
{
return Utils.formatToString(this, 'target', 'type');
}
}
/**
* ...
* @author wvxvw
*/
class utils.Utils
{
private static var CLASS_NAME:String = 'className';
public static function formatToString(o:Object):String
{
var i:Number = 1;
var l:Number = arguments.length;
var r_str:String = '[' + o[CLASS_NAME] + ' ';
for (i = 1; i < l; i++)
{
r_str += arguments[i] + '=' + o[arguments[i]] + ' ';
}
return r_str + ']';
}
public static function formatToStyle(o:Object):String
{
var skip:Array = arguments.slice(1, arguments.length);
var i:Number = skip.length;
var needSkip:Boolean = false;
var s:String;
var r_str:String = o[CLASS_NAME] + ' {';
for (s in o)
{
if (o[s] instanceof Function) continue;
if (s == CLASS_NAME) continue;
while (i--)
{
if (s == skip[i])
{
needSkip = true;
break;
}
}
i = skip.length;
if (needSkip) continue;
r_str += s + ':' + o[s] + '; ';
}
return r_str + '}';
}
}
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 02.06.2008 в 14:11. |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 89
|
А можно примерчик, как вашим кодом пользоваться с аггрегированым eventDispatcher-ом??
а то что-то я теряюсь в догадках ![]() Скажем, чтобы мувик А слушал onResize у мувика Б и чтонить делал.... Спасибо. |
|
|||||
|
Modus ponens
|
Вот, сваял пример, ну, конечно, он немного... избыточный =) это все-таки пример, в реальной жизни я бы скорее всего обошелся чем-то поскромнее =)
ЗЫ. проект собирался и компайлился FD + MTASC... чтобы скомпайлить из флеша надо корневую директорию проекта добавить в classpath и вызвать Main.main() *А, ну да, и прилинкованный клип чтобы был в библиотеке того файла, из которого компилировать будем* =) ЗЫЫ. Зато у проекта есть одно неоспоримое преимущество - портируется в АС3 менее чем за 5 минут =)
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 02.06.2008 в 02:12. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
))) Я тоже наваял, может Вам уже и не интересно)) Четырех строк действительно хватило.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Sep 2006
Сообщений: 89
|
Спасибо всем навоявшим (wolsh, wvxvw)!!!
))Самое интересное, что я тоже уже навоял ![]() вроде как работает, соглашусь с Wolsh, что в данном случае сделал "4-мя строчками", но все равно было интересно и полезно узнать как делать альтернативные варианты... Всем удачи и хорошего дня!.. |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:05. |
|
|
« Предыдущая тема | Следующая тема » |
|
|