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

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

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

Регистрация: Jul 2010
Сообщений: 3
По умолчанию Привязывание события к динамически создаваемым объектам

AS2

Привет. Нужна помощь вот в чём.
У нас есть динамически создаваемые объекты, например точки и каждая точка имеет свою координату, своё название и свою ссылку.

Как привязать событие, которое происходит при нажатие на точку. Может кто нибудь выложит весь код. ни как не могу понять как привязать клик по точке и чтоб нить произошло, пытался пользоваться addEventListener - не могу понять как он работает и как обрабатывать.

Выкладываю код класса
Код AS1/AS2:
class Metka {
 
 public var testt:Number;
 public var container_mc:MovieClip; 
 
 
	public function draw  ():Void
	{
		container_mc=_root.createEmptyMovieClip("myClip"+testt, testt);
		container_mc.loadMovie("1.png");	
 
               // Вот тут надо привязать клик по точке
		container_mc.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
 
	}	
 
	public function mouseOverHandler()
	{
		trace ("+");
	}
 
 
	//  Функция создает новый объект этого кдассаа
	public function add_metka(id,koor_x,koor_y)
	{
		testt=id;
		draw();
		koordinat(koor_x,koor_y);
	}
 
	//  Функция изменяем место пложение клипа
	public function koordinat(koor_x,koor_y)
	{
	  if (koor_x){SetX(koor_x);}
	  if (koor_y){SetY(koor_y);}
	}// - - -  -- 
 
	public function SetX(koor_x)
	{
		container_mc._x=koor_x;
	}// - - - - -
 
	public function SetY(koor_y)
	{
		container_mc._y=koor_y;
	}// - - -- - - 
}


Последний раз редактировалось dudialex; 07.07.2010 в 11:28.
Старый 07.07.2010, 11:38
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Вот эта конструкция
Код AS3:
container_mc.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
вроде из AS3, а не AS2.
Вам скорее всего onRollOver нужно использовать.

И потом, как только вы загрузите контент в container_mc, все обработчики его событий слетят.
Вот тема была буквально недавно: http://www.flasher.ru/forum/showthread.php?t=141869
Решения там тоже есть.


Последний раз редактировалось mooncar; 07.07.2010 в 11:40.
Старый 07.07.2010, 12:25
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS1/AS2:
class Mark
{
	public var test:number;
	public var container:movieclip; 
 
	public function set x(value:Number):Void
	{
		this.container._x = value;
	}
 
	public function set y(value:Number):Void
	{
	       this.container._y = value;
	}
 
	/**
	 * Constructor.
	 * Creates new instance of <code>Mark</code>
	 */
	public function Mark() { super(); }
 
	public function draw():Void
	{
		// Use MovieClipLoader instead
		this.container = _root.createEmptyMovieClip("myClip" + test, test);
		this.container.loadMovie("1.png");
 
               // Вот тут надо привязать клик по точке
		this.container.onRollOver = this.makeDelegate(this.mouseOverHandler);
 
	}	
 
	private function makeDelegate(func:Function):Function
	{
		var context:Mark = this;
		return function():Object
		{
			return func.apply(context, arguments);
		}
	}
 
	public function mouseOverHandler():Void
	{
		trace ("+");
	}
 
	/**
	 * This method creates new <code>MovieClip</code> somewhere...
	 */
	public function addMark(id:Number, x:Number, y:Void):Void
	{
		this.test = id;
		this.draw();
		this.koordinat(x, y);
	}
 
	/**
	 * Функция изменяет местоположение клипа
	 */
	public function position(x:Number, y:Number):Void
	{
	  if (!isNaN(x)) this.x = x;
	  if (!isNaN(y)) this.y = y;
	}
}
Что понял, исправил, что не понял, оставил как есть. Если уж пишете в классах, то используйте MovieClipLoader, а не loadMovie
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 07.07.2010 в 12:28.
Старый 07.07.2010, 12:47
dudialex вне форума Посмотреть профиль Отправить личное сообщение для dudialex Найти все сообщения от dudialex
  № 4  
Ответить с цитированием
dudialex

Регистрация: Jul 2010
Сообщений: 3
Можно прокомментрировать или принцип как это работает описать

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Код AS1/AS2:
class Mark
{
	public var test:number;
	public var container:movieclip; 
 
	public function set x(value:Number):Void  // устанавливает начальную коорд контейнера
	{
		this.container._x = value;
	}
 
	public function set y(value:Number):Void  // устанавливает начальную коорд контейнера
	{
	       this.container._y = value;
	}
 
	/**
	 * Constructor.
	 * Creates new instance of <code>Mark</code>
	 */
	public function Mark() { super(); }  // для красоты
 
	public function draw():Void  // 
	{
		// Use MovieClipLoader instead
		this.container = _root.createEmptyMovieClip("myClip" + test, test);
		this.container.loadMovie("1.png");
 
              // используем делегат класс для обработки событий в классах, подробнее mx.utils.Delegate сдесь же он использует собственно созданный делегат  . 
		this.container.onRollOver = this.makeDelegate(this.mouseOverHandler);
 
	}	
 
	private function makeDelegate(func:Function):Function
	{
		var context:Mark = this;
		return function():Object
		{
			return func.apply(context, arguments);
		}
	}
 
	public function mouseOverHandler():Void
	{
		trace ("+");
	}
 
	/**
	 основная функция создающая клипец с параметрами какиеми надо
	 */
	public function addMark(id:Number, x:Number, y:Void):Void
	{
		this.test = id;
		this.draw();
		this.koordinat(x, y);
	}
 
	/**
	 * Функция изменяет местоположение клипа, в любой мопмент времени!!!
	 */
	public function position(x:Number, y:Number):Void
	{
	  if (!isNaN(x)) this.x = x;
	  if (!isNaN(y)) this.y = y;
	}
}

Старый 07.07.2010, 14:01
dudialex вне форума Посмотреть профиль Отправить личное сообщение для dudialex Найти все сообщения от dudialex
  № 6  
Ответить с цитированием
dudialex

Регистрация: Jul 2010
Сообщений: 3
По умолчанию Спасибо большое.

Огромное спасибо что помогли.

Выкладываю код для будущих поколений.

В первом кадре нашей флеш
Код AS1/AS2:
stop ();
 
var b1= new Metka;
b1.add_metka("1","150","160");
 
var b2= new Metka;
b2.add_metka("2","250","100");

Файл Metka.as
Код AS1/AS2:
class Metka {
 
 public var testt:Number;
 public var container_mc:MovieClip; 
 public var container_mc_kartinko:MovieClip; 
 
	public function draw  ():Void
	{
		container_mc=_root.createEmptyMovieClip("myClip"+testt, testt);
 
		container_mc_kartinko=container_mc.createEmptyMovieClip("kartinko",1);
		container_mc_kartinko.loadMovie("1.png");
 
		this.container_mc.onPress = this.makeDelegate(this.mouseOverHandler);		
	}	
 
	private function makeDelegate(func:Function):Function
	{
		var context:Metka = this;
		return function():Object
		{
			return func.apply(context, arguments);
		}
	}
 
 
	public function mouseOverHandler()
	{ 
	    //  Тут будет происходить то что нужно при клике
		getURL("http://ya.ru","_blank");
		trace (testt);
	}
 
 
	//  Функция создает новый объект этого кдассаа
	public function add_metka(id,koor_x,koor_y)
	{
		testt=id;
		draw();
		koordinat(koor_x,koor_y);
	}
 
	//  Функция изменяем место пложение клипа
	public function koordinat(koor_x,koor_y)
	{
	  if (koor_x){SetX(koor_x);}
	  if (koor_y){SetY(koor_y);}
	}// - - -  -- 
 
	public function SetX(koor_x)
	{
		container_mc._x=koor_x;
	}// - - - - -
 
	public function SetY(koor_y)
	{
		container_mc._y=koor_y;
	}// - - -- - - 
}

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

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

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


 


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


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