![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2015
Сообщений: 64
|
Доброго времени суток!!!
Есть главный класс Main. В основном конструкторе класса вызывается функция размещающая кнопки на сцене. Затем для каждой кнопки создается слушатель событий.В функции ссылающейся на слушатель кнопки buildVertical(далее речь пойдет о ней, т.к. для других кнопок я ещё ничего не сделал) создается экземпляр класса BuildVerticalClass. К этому экземпляру привязывается слушатель события. 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. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Для начала вытащите все функции из конструктора в тело класса (как fAllowBuildRoad).
Черт ногу сломит. Добавлено через 9 минут Что именно срабатывает "для других экземпляров"? Остановка драга? А до этого они все за мышкой ползают чтоли? Или как Вы это увидели? Опишите своими словами, как это выглядит, потому что интерпретировать Вашу интерпретацию слегка затруднительно. Это как ответить на вопрос "я подписал кнопку на событие клика, жму а ничего не происходит! что делать???7?" Нужно еще что-то кроме описания заведомо невозможной ситуации. Что это за "другие экземпляры", если Вы пишете "после первого нажатия", то есть вроде как не должно быть других кусков дороги. Короче, опишите подробнее происходящее, не обязательно псевдонаучным языком.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Mar 2015
Сообщений: 64
|
Извиняюсь, сразу ответить не мог.
Нажимаю на кнопку buildVertical и сразу появляется кусок дороги координаты которого равны координатам курсора мыши(здесь все нормально). Далее почему-то сразу же срабатывает функция fCheckHitWithCell(остановка драга), хотя не должна (Она должна сработать после клика по сцене). Что касается остальных кнопок, то при нажатии на них появляется соответствующий кусок дороги и движется вместе с курсором(здесь все нормально), но если кликнуть по сцене то происходит остановка драга, хотя для тех кусков дороги,которые вызывают эти кнопки я ничего подобного не писал. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
По второй проблеме затрудняюсь что-то сказать. Возможно, Вы опять что-то намудрили с наследованием, или код потерялся где-то внутри рисованых клипов.
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:23. |
|
|
« Предыдущая тема | Следующая тема » |
|
|