Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.06.2008, 14:20
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 11  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1. У меня в этом примере движок имел постоянные размеры. Но допустим Вы это изменили, нетрудно.
2. При любом ресайзе маски Вам недостаточно будет менять высоту скроллера и размер движка. Должно измениться и положение движка, т.к. изменилась длина трека, при этом текст должен остаться там, куда он был проскроллирован.
3. Скроллер проще просто удалить и приаттачить/настроить заново. Расчет куда поставить движок чтобы текст остался на месте придется делать в любом случае, зато не придется дублировать половину кода в функцию ресайза)
__________________
Reality.getBounds(this);

Старый 01.06.2008, 15:06
Denis Davidov вне форума Посмотреть профиль Отправить личное сообщение для Denis Davidov Найти все сообщения от Denis Davidov
  № 12  
Ответить с цитированием
Denis Davidov

Регистрация: Sep 2006
Сообщений: 89
Согласен, что одини из вариантов просто удалять скроллер и создавать снова, но тогда придется писать callBack у onResize маски, ибо скроллер должен создаваться после изменения маски, кот. возникает например из-за изменения размеров сцены.
А это уже начинает становиться грамоздко.
А если еще допустить что на ресайз маски должно выполняться еще что-то, то тогда вообще придется писать отседльную внешнию функцию, содержащуу все действия (включая удаление/перересовку скроллера), кот. должны выполняться при ресайзе маски. ИМХО было бы проще просто слушать разными классами этот ресайз...

Старый 01.06.2008, 15:19
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 13  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Зато понавешать множество ненужных диспетчеров это круто...

Старый 01.06.2008, 17:13
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 14  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
А это уже начинает становиться грамоздко.
На самом деле речь-то идет о четырех строчках)))))) А Вы класс, класс.
__________________
Reality.getBounds(this);

Старый 01.06.2008, 17:16
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 15  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от Denis Davidov Посмотреть сообщение
Как то так? чем EventDispatcher лучше чем то, что Вы описали?
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 + '}';
	}
	
}
это просто утилита для упрощения дебагинга, не обязательно ее использовать =) чтобы она работала, как задумано, в каждом классе должна быть переменная className типа String с названием этого самого класса.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 02.06.2008 в 14:11.
Старый 01.06.2008, 21:35
Denis Davidov вне форума Посмотреть профиль Отправить личное сообщение для Denis Davidov Найти все сообщения от Denis Davidov
  № 16  
Ответить с цитированием
Denis Davidov

Регистрация: Sep 2006
Сообщений: 89
А можно примерчик, как вашим кодом пользоваться с аггрегированым eventDispatcher-ом??
а то что-то я теряюсь в догадках
Скажем, чтобы мувик А слушал onResize у мувика Б и чтонить делал....
Спасибо.

Старый 02.06.2008, 01:43
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 17  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Вот, сваял пример, ну, конечно, он немного... избыточный =) это все-таки пример, в реальной жизни я бы скорее всего обошелся чем-то поскромнее =)

ЗЫ. проект собирался и компайлился FD + MTASC... чтобы скомпайлить из флеша надо корневую директорию проекта добавить в classpath и вызвать Main.main() *А, ну да, и прилинкованный клип чтобы был в библиотеке того файла, из которого компилировать будем* =)

ЗЫЫ. Зато у проекта есть одно неоспоримое преимущество - портируется в АС3 менее чем за 5 минут =)
Вложения
Тип файла: zip simple_resize.zip (13.3 Кб, 46 просмотров)
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 02.06.2008 в 02:12.
Старый 02.06.2008, 01:57
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 18  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
))) Я тоже наваял, может Вам уже и не интересно)) Четырех строк действительно хватило.
Вложения
Тип файла: rar Scroller+txt-file+resizer.rar (18.6 Кб, 55 просмотров)
__________________
Reality.getBounds(this);

Старый 02.06.2008, 10:24
Denis Davidov вне форума Посмотреть профиль Отправить личное сообщение для Denis Davidov Найти все сообщения от Denis Davidov
  № 19  
Ответить с цитированием
Denis Davidov

Регистрация: Sep 2006
Сообщений: 89
Спасибо всем навоявшим (wolsh, wvxvw)!!! ))
Самое интересное, что я тоже уже навоял
вроде как работает, соглашусь с Wolsh, что в данном случае сделал "4-мя строчками", но все равно было интересно и полезно узнать как делать альтернативные варианты...
Всем удачи и хорошего дня!..

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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