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

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

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

Регистрация: Feb 2011
Сообщений: 15
Thumbs up Как присвоить слушателя событий для 6 кнопок в контейнере, имеющие одинаковые имена?

Игра "Дурак" .
Как присвоить слушателя событий для 6 кнопок в контейнере, которые имеют одинаковые имена?
Cлушатель почему то присваивается только последней карте !
Код AS3:
package com.Script
{
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
 
	public class Kart extends MovieClip
	{
		var shet:int = 0;
		var feuf:int;
		var movi:SimpleButton;
		var arr:Array = new Array(kresti6, kresti7, kresti8, kresti9, kresti10, kresti11, kresti12, kresti13, kresti14, love6, love7, love8,
		love9, love10, love11, love12, love13, love14, piki6, piki7, piki8, piki9, piki10, piki11, piki12, piki13, piki14, tref6, tref7, tref8, tref9,
		tref10,tref11,tref12,tref13,tref14);
		var arr2:Array = arr.slice(0,35) ;
		public function Kart()
		{
		}
		public function shest(dobavka:int):void
		{
			for (var i:int = 0; i < dobavka; i++)
			{
				feuf = feuf + 60;
				shet = Math.round((0 - (arr2.length-1)) * Math.random() + arr2.length-1);
				movi = new arr2[shet  ];
				trace(movi.name);
				addChild(movi);
				movi.x = feuf + 30;
				movi.y = 350;
				arr2.splice(shet,1);
				arr2.filter(removeEmpty);
				movi.addEventListener(MouseEvent.CLICK, click)
 
			}
 
		}
		function removeEmpty(a:Object, index:int, source:Array):Boolean
		{
			if (a is Number)
			{
				return true;
			}
			return false;
		}
		public function click(e:MouseEvent):void
		{
			e.target.y -=  70; 
			e.target.removeEventListener(MouseEvent.CLICK, click);
 
		}
 
	}
}
Код AS3:
package com.Script
{
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.ui.Multitouch;
	import flash.events.MouseEvent;
 
	public class main extends MovieClip
	{
		var butto:circleflatbrown;//КнопКа из компонентов Flash IDE
		var _kart:Kart;
		var dobavka:int = 6;
		public function main()
		{
			butto = new circleflatbrown ();
			_kart = new Kart ();
			addChild(_kart);
			addChild(butto);
			butto.x =200;
			butto.y = 100;
			butto.addEventListener(MouseEvent.CLICK, sdat);
		}
		public function sdat(events:MouseEvent):void
		{
 
			if (_kart.cont.numChildren<=5)
			{
				dobavka -= _kart.numChildren;   
				_kart.shest(dobavka);
			}
		}
 
	}
}


Последний раз редактировалось Кирилл63; 16.03.2011 в 14:22.
Старый 14.03.2011, 18:34
3p.station вне форума Посмотреть профиль Отправить личное сообщение для 3p.station Найти все сообщения от 3p.station
  № 2  
Ответить с цитированием
3p.station
 
Аватар для 3p.station

блогер
Регистрация: Oct 2009
Адрес: кочевник. Киев
Сообщений: 453
Записей в блоге: 5
1 - оформите код в AS3 а не PHP
2 - названия классов пишутся с большой буквы
3 - cont.addEventListener(MouseEvent.CLICK, click); нет необходимости делать много раз в цикле достаточно одного раза
4 - после первого же клика вы отписываетесь от события - вероятно в этом и ваша проблема

Добавлено через 1 минуту
и 5 - не пользуйтесь нативными кнопками

Добавлено через 7 минут
хотя по пункту 4 - я не прав, вы отписываетесь .. но не от того а вообще не понятно от чего,
вообщем трейс вам в руки и почитайте как работают слушатели
хелп
__________________
мира и гармонии

Старый 14.03.2011, 22:27
Кирилл63 вне форума Посмотреть профиль Отправить личное сообщение для Кирилл63 Найти все сообщения от Кирилл63
  № 3  
Ответить с цитированием
Кирилл63

Регистрация: Feb 2011
Сообщений: 15
Делал все как вы сказали, но результат тот же. При нажатии на любую из 6-ти карт, координаты изменяются только для последней карты . Читаю хелп.


Последний раз редактировалось Кирилл63; 14.03.2011 в 23:20.
Старый 14.03.2011, 22:47
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
3p.station, Кирилл слабо знаком с основным языком общения.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 14.03.2011 в 23:12.
Старый 14.03.2011, 23:04
Кирилл63 вне форума Посмотреть профиль Отправить личное сообщение для Кирилл63 Найти все сообщения от Кирилл63
  № 5  
Ответить с цитированием
Кирилл63

Регистрация: Feb 2011
Сообщений: 15
Исправлюсь.

Старый 14.03.2011, 23:25
3p.station вне форума Посмотреть профиль Отправить личное сообщение для 3p.station Найти все сообщения от 3p.station
  № 6  
Ответить с цитированием
3p.station
 
Аватар для 3p.station

блогер
Регистрация: Oct 2009
Адрес: кочевник. Киев
Сообщений: 453
Записей в блоге: 5
Перечитайте ваш вопрос. Вы пишете что "слушатель почему то присваивается только последней карте !". Несмотря на то, что сама формулировка стремная, продолжим...
Далее вы пишете что "При нажатии на любую карту координаты изменяются только у последней !", тоесть "слушатель почему то присваивается ВСЕМ картам !", но в вашем обработчике (function click (e:MouseEvent)) меняется координата movi, а что у вас movi ? посмотрите в коде - верно это последняя созданная карта в цикле.
попробуйте написать там e.target.y -= 70; и уберите отписывание непонятно от чего.
и еще все переделайте ( : и пообещайте понять что же такое e.target

успехов
__________________
мира и гармонии

Старый 14.03.2011, 23:26
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 7  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Код AS3:
var cont:Sprite = new Sprite();
Потом в методе начинается цикл
а в теле цикла Вы 10 раз вызываете один и тот же cont:
Цитата:
Код AS3:
for (var i:int = 0; i < dobavka; i++)
			{
				feuf = feuf + 60;
				shet = Math.round((0 - (arr2.length-1)) * Math.random() + arr2.length-1);
				trace("МАТЕМАТ" + shet);
				trace ("ДЛИНА"+arr2.length);
				movi = new arr2[shet];
				trace("МОВИ" + arr2[shet]);
				cont.addChild(movi);
				cont.addEventListener(MouseEvent.CLICK, click);
				movi.x = feuf + 30;
				movi.y = 350;
				trace(movi.x);
				arr2.splice(shet,1);
				arr2.filter(removeEmpty);
 
			}
Если кнопка - это movi, то может тогда на movi слушатель и вешать? Это не as2 - ту на кнопки все нормально вешается, или я ошибаюсь?

Старый 14.03.2011, 23:28
3p.station вне форума Посмотреть профиль Отправить личное сообщение для 3p.station Найти все сообщения от 3p.station
  № 8  
Ответить с цитированием
3p.station
 
Аватар для 3p.station

блогер
Регистрация: Oct 2009
Адрес: кочевник. Киев
Сообщений: 453
Записей в блоге: 5
Вы 10 раз вызываете один и тот же cont - где ??
__________________
мира и гармонии

Старый 14.03.2011, 23:38
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 9  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Хм, Кирилл исправился!

Цитата:
Как присвоить слушателя событий для 6 кнопок в контейнере, которые имеют одинаковые имена?
Кнопки имеют одинаковые имена, но они есть разные экземпляры. Подписывайте каждую кнопку к слушателю.
Пример
Код AS3:
button_1.addEventListener(MouseEvent.CLICK, handler_click);
button_2.addEventListener(MouseEvent.CLICK, handler_click);
...
button_N.addEventListener(MouseEvent.CLICK, handler_click);
 
function handler_click(event:MouseEvent):void {
    trace( (event.targer as DisplayObject).name ); // хаха, одинаковые имена )
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 15.03.2011, 00:23
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 10  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
имена - это очень плохо
попробуйте сделать реализацию так, будто свойства .name в природе не существует
__________________
скриптограф

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

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

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


 


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


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