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

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

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

Регистрация: Mar 2015
Сообщений: 64
По умолчанию странное поведение e.currentTarget

Доброго времени суток!!!

Есть главный класс Main. В основном конструкторе класса вызывается функция размещающая кнопки на сцене.
Затем для каждой кнопки создается слушатель событий.В функции ссылающейся на слушатель кнопки buildVertical(далее речь пойдет о ней, т.к. для других кнопок я ещё ничего не сделал) создается экземпляр класса BuildVerticalClass. К этому экземпляру привязывается слушатель события.

Код AS3:
package cellAndRoadPG{
 
	import cellAndRoadPG.cellPG.*;
	import cellAndRoadPG.roadPG.*;
	import cellAndRoadPG.gameButtonsPG.*;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Main extends MovieClip{
		//в главном конструкторе класса вызовем функции генерации карты.
		internal var main = this;//переменная для обращения к классу Main
		public function Main (){
		    fGenerationlocationCell();
			fPlaceButtons();
			stage.addEventListener(MouseEvent.MOUSE_DOWN, fAllowBuildRoad);
		}
 
//какой-то код
 
internal var build:Boolean = false;
 
	   //разместим кнопки на игровой панели и создадим для каждой из них обработчик событий.
        internal function fPlaceButtons(){
			var buildVertical:BuildVerticalClass = new BuildVerticalClass();
			main.addChild(buildVertical);
			buildVertical.addEventListener(MouseEvent.CLICK, fBuildVertical);
		    function fBuildVertical(e:MouseEvent){
			    var roadVertical:RoadVerticalClass = new RoadVerticalClass();
				roadVertical.x = mouseX;
				roadVertical.y = mouseY;
				main.addChild(roadVertical);
				roadVertical.startDrag();
				roadVertical.addEventListener(Event.ENTER_FRAME, fCheckHitWithCell);/*функция ищущая пересечение дороги и клетки, и размещающая
				дорогу в случае соблюдения условий описанных внутри функции*/
		    }
 
			var buildHorizontal:BuildHorizontalClass = new BuildHorizontalClass();
			main.addChild(buildHorizontal);
			buildHorizontal.addEventListener(MouseEvent.CLICK, fBuildHorizontal);
		    function fBuildHorizontal(e:MouseEvent){
			    var roadHorizontal:RoadHorizontalClass = new RoadHorizontalClass();
				roadHorizontal.x = mouseX;
				roadHorizontal.y = mouseY;
				main.addChild(roadHorizontal);
				roadHorizontal.startDrag();
		    }
 
			var buildRightUp:BuildRightUpClass = new BuildRightUpClass();
			main.addChild(buildRightUp);
			buildRightUp.addEventListener(MouseEvent.CLICK, fBuildRightUp);
		    function fBuildRightUp(e:MouseEvent){
			    var roadRightUp:RoadRightUpClass = new RoadRightUpClass();
				roadRightUp.x = mouseX;
				roadRightUp.y = mouseY;
				main.addChild(roadRightUp);
				roadRightUp.startDrag();
		    }
 
			var buildRightDown:BuildRightDownClass = new BuildRightDownClass();
			main.addChild(buildRightDown);
			buildRightDown.addEventListener(MouseEvent.CLICK, fBuildRightDown);
		    function fBuildRightDown(e:MouseEvent){
			    var roadRightDown:RoadRightDownClass = new RoadRightDownClass();
				roadRightDown.x = mouseX;
				roadRightDown.y = mouseY;
				main.addChild(roadRightDown);
				roadRightDown.startDrag();
		    }
 
			var buildLeftDown:BuildLeftDownClass = new BuildLeftDownClass();
			main.addChild(buildLeftDown);
			buildLeftDown.addEventListener(MouseEvent.CLICK, fBuildLeftDown);
		    function fBuildLeftDown(e:MouseEvent){
			    var roadLeftDown:RoadLeftDownClass = new RoadLeftDownClass();
				roadLeftDown.x = mouseX;
				roadLeftDown.y = mouseY;
				main.addChild(roadLeftDown);
				roadLeftDown.startDrag();
		    }
 
			var buildLeftUp:BuildLeftUpClass = new BuildLeftUpClass();
			main.addChild(buildLeftUp);
			buildLeftUp.addEventListener(MouseEvent.CLICK, fBuildLeftUp);
		    function fBuildLeftUp(e:MouseEvent){
			    var roadLeftUp:RoadLeftUpClass = new RoadLeftUpClass();
				roadLeftUp.x = mouseX;
				roadLeftUp.y = mouseY;
				main.addChild(roadLeftUp);
				roadLeftUp.startDrag();
		    }
	    }
 
	        function fCheckHitWithCell(e:Event){
		    var road_vertical = e.currentTarget;
		    if(build == true){
				 road_vertical.stopDrag();
				 build = false;
			}
		}
 
        //разрешить строить дорогу.
		private function fAllowBuildRoad(e:MouseEvent){
			build = true;
		}
проблема в следующем:
При первом нажатии на кнопку buildVertical создается экземпляр класса BuildVerticalClass и сразу-же срабатывает функция привязанная к этому экземпляру. Далее, почему-то срабатывают все кнопки, т.е.
выполняется функция прописанная для экземпляра класса BuildVerticalClass и ссылающаяся на этот экземпляр с помощью метода e.currentTarget и эта функция срабатывает для других экземпляров других классов.

Кто-нибудь может объяснить почему так происходит.


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

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

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


 


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


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