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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.02.2007, 15:54
Annihilator вне форума Посмотреть профиль Отправить личное сообщение для Annihilator Найти все сообщения от Annihilator
  № 1  
Ответить с цитированием
Annihilator
 
Аватар для Annihilator

Регистрация: Sep 2005
Адрес: Kiev
Сообщений: 73
Отправить сообщение для Annihilator с помощью ICQ
По умолчанию задание контекстного меню в конструкторе класса

В конструкторе класса создаётся контекстное меню. Но методы этого объекта, которые повешены на пункты меню не вызываются. Почему?
Код:
dynamic class Tmb extends MovieClip {
private var newMenu:ContextMenu, menuItemDelete:ContextMenuItem, menuItemResize:ContextMenuItem;
function Tmb() {
super();
this.newMenu = new ContextMenu();
this.newMenu.hideBuiltInItems();
this.menuItemDelete = new ContextMenuItem("Delete object", removeit);
//this.menuItemDelete = new ContextMenuItem("Delete object", this.removeit); - так тоже метод не находится
this.menuItemResize = new ContextMenuItem("Resize object", resizeit);
this.newMenu.customItems.push(this.menuItemDelete);
this.newMenu.customItems.push(this.menuItemResize);
this.menu = this.newMenu;
}
function removeit(){
this.removeMovieclip();
}
function resizeit(){
this._xscale=this._yscale=200;
}

}

Старый 28.02.2007, 16:42
Mr. Fixit вне форума Посмотреть профиль Найти все сообщения от Mr. Fixit
  № 2  
Ответить с цитированием
Mr. Fixit
Banned
[+1 08.05.08]
[+4 14.04.08]
[+1.3 02.05.08]

Регистрация: Oct 2006
Адрес: кагбэ Киеф!!1
Сообщений: 1,473
вот код, где box - инстанс имя объекта(МК).
Объясни зачем super ();

Код:
dynamic class Tmb extends MovieClip {
	private var newMenu:ContextMenu, menuItemDelete:ContextMenuItem, menuItemResize:ContextMenuItem;
	function Tmb () {
		//super ();
		newMenu = new ContextMenu ();
		newMenu.hideBuiltInItems ();
		menuItemDelete = new ContextMenuItem ("Delete object", remove);
		menuItemResize = new ContextMenuItem ("Resize object", resizE);
		newMenu.customItems.push (menuItemDelete);
		newMenu.customItems.push (menuItemResize);
		menu = newMenu;
	}
	function remove () {
		box.unloadMovie ();
	}
	function resizE () {
		box._xscale = box._yscale=200;
	}
}

Старый 28.02.2007, 20:46
Annihilator вне форума Посмотреть профиль Отправить личное сообщение для Annihilator Найти все сообщения от Annihilator
  № 3  
Ответить с цитированием
Annihilator
 
Аватар для Annihilator

Регистрация: Sep 2005
Адрес: Kiev
Сообщений: 73
Отправить сообщение для Annihilator с помощью ICQ
to Mr. Fixit :
super() нужно для создания мувиклипа этого класса,а не просто объекта.
Ты проверил свой код на работоспособность?
Цитата:
В отличие от обычных классов, свойства в конструкторе динамического класса должны предваряться указателем «this». Это связано с тем, что цепочка областей видимости кода соответствующего конструктора статична и включает следующие элементы: объект активации, основную временную шкалу, объект _global. Цепочка же областей видимости конструктора обычного класса динамична и образована объектом активации, создаваемым экземпляром класса и
объектом _global.
Убедиться, что приведенная особенность действительно имеет место, очень просто. Когда в цепочку областей видимости кода конструктора входит основная временная шкала, то, если не использовать this, свойства будут помешены на нее
Так что твой код создаст контекстное меню на _root-е, а не на мувиклипе. Кроме того, таких объектов создаётся много и в разных местах, с динамически формируемым именем (типа ["box_"+i]) поэтому внутри класса нужно использовать только указатель (this)


Последний раз редактировалось Annihilator; 28.02.2007 в 20:50.
Старый 28.02.2007, 20:59
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от Annihilator
Так что твой код создаст контекстное меню на _root-е, а не на мувиклипе.
Неправда.

Старый 28.02.2007, 21:57
Mr. Fixit вне форума Посмотреть профиль Найти все сообщения от Mr. Fixit
  № 5  
Ответить с цитированием
Mr. Fixit
Banned
[+1 08.05.08]
[+4 14.04.08]
[+1.3 02.05.08]

Регистрация: Oct 2006
Адрес: кагбэ Киеф!!1
Сообщений: 1,473
понятно. Но код функционирует.

Старый 01.03.2007, 01:43
Mr. Fixit вне форума Посмотреть профиль Найти все сообщения от Mr. Fixit
  № 6  
Ответить с цитированием
Mr. Fixit
Banned
[+1 08.05.08]
[+4 14.04.08]
[+1.3 02.05.08]

Регистрация: Oct 2006
Адрес: кагбэ Киеф!!1
Сообщений: 1,473
и что надо добавить или изменить, что бы удалялся соответствующий объект?
Код:
dynamic class Tmb extends MovieClip {
	private var newMenu:ContextMenu, menuItemDelete:ContextMenuItem, menuItemResize:ContextMenuItem;
	function Tmb () {
		this.super ();
		this.newMenu = new ContextMenu ();
		this.newMenu.hideBuiltInItems ();
		this.menuItemDelete = new ContextMenuItem ("Delete object", remove);
		this.menuItemResize = new ContextMenuItem ("Resize object", resizE);
		this.newMenu.customItems.push (menuItemDelete);
		this.newMenu.customItems.push (menuItemResize);
		this.menu = this.newMenu;
	}
	function remove () {
		for (var i = 0; i<3; i += 1) {
			_root['box'+i].unloadMovie ();
		}
	}
	function resizE () {
		for (var i = 0; i<3; i += 1) {
			_root['box'+i]._xscale = this['box'+i]._yscale=200;
		}
	}
}

Старый 01.03.2007, 12:55
Annihilator вне форума Посмотреть профиль Отправить личное сообщение для Annihilator Найти все сообщения от Annihilator
  № 7  
Ответить с цитированием
Annihilator
 
Аватар для Annihilator

Регистрация: Sep 2005
Адрес: Kiev
Сообщений: 73
Отправить сообщение для Annihilator с помощью ICQ
Вобщем я понял: работает только если внутри метода прописан прямой путь к созданному клипу. Это плохо, потому что, как я уже сказал, они создаются в разных местах и с динамическим именем. Как выкрутится в такой ситуации?

Старый 01.03.2007, 12:58
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Использовать Delegate.

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

Регистрация: Sep 2005
Адрес: Kiev
Сообщений: 73
Отправить сообщение для Annihilator с помощью ICQ
__etc - спасибо, Delegate - это то, что надо Работает из любого места

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

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

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


 


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


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