|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Lorem ipsum
|
1. Event — это уже есть такой класс: flash.events.Event. А ты заставил компилятор понимать это слово как твой пак с кастомными событиями. Разумеется, можно выкрутиться и при каждом "Event.ADDED_TO_STAGE" писать "flash.events.Event.ADDED_TO_STAGE", но лучше раз и навсегда переименовать пак "Event" в какие-то "events" (и да, паки строчными буквами пишутся).
2. В этом месте "startStopReset.addEventListener(new StartStopReset.NEW_START, newStart);" не нужен "new". NEW_START — это не конструктор класса, а статическое поле, тип события, метка, строчка с названием события, за которым будем следить. Мне кажется тебе нужно сделать паузу на каких-то полчаса и еще раз внимательно прочитать доки по Event и EventDispatcher. Ты делаешь совершенно простые ошибки только потому, что крадешься на ощупь.
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
Спасибо
Я новичок+забросил флеш на пол года, надобно быть более внимательным И с нова косяк, ну тут я вообще не понимаю, должно работать Не могу поймать событие, хотя диспатчится и возвращает true скину все, в каком виде сейчас Своё событие package EventClass { import flash.events.Event; public class StartStopReset extends Event { public static const NEW_START:String = "newStart"; public static const ANEW:String = "anew"; public static const STOP:String = "stop"; public function StartStopReset(type:String, bubbles:Boolean, cancable:Boolean) { super (type, bubbles, cancelable); } public override function clone ():Event { return new StartStopReset (type, bubbles, cancelable); } public override function toString ():String { return formatToString ("StartStopReset", "bubbles", "cancable", "EventPhase"); } } } package EventClass { import flash.display.Sprite; public class SwitchEvent extends Sprite { public function SwitchEvent() { } public function newStart():void { dispatchEvent(new StartStopReset(StartStopReset.NEW_START, true, false)); } public function anew():void { dispatchEvent(new StartStopReset(StartStopReset.ANEW, true, false)); } public function stop():void { dispatchEvent(new StartStopReset(StartStopReset.STOP, true, false)); } } } package Singleton.StartMenuSingleton.StartMenu { import EventClass.StartStopReset; import EventClass.SwitchEvent; import flash.events.Event; import flash.events.MouseEvent; import Singleton.StartMenuSingleton.StartMenu.StartButton.StartButton; public class StartMenu extends startMenu_mc { public function StartMenu() { x = 400; y = 225; addEventListener(Event.ADDED_TO_STAGE, init); } private static var startButton:StartButton = new StartButton(); private function init(e:Event):void { removeEventListener(Event.ADDED_TO_STAGE, init); this.addChild(startButton); startButton.addEventListener(MouseEvent.CLICK, clickStartButton); } private var switchEvent:SwitchEvent = new SwitchEvent(); private function clickStartButton(e:MouseEvent):void { switchEvent.newStart(); //тут вызывается функция класса для создания своего события } public function get getStartButton ():startButton_mc { return startButton; } } } package ObjactGame.PlayGame { import EventClass.StartStopReset; import EventClass.SwitchEvent; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import nape.space.Space; import ObjactGame.ActionObject.ControlUser; import ObjactGame.PositionObject.PositionObject; import Singleton.CatSingleton.CatBody.CatBody; import Singleton.CatSingleton.CatSingleton; import Singleton.MouseBalloonSingleton.MouseBalloonSingleton; import Singleton.MouseSingleton.MouseSingleton; import Singleton.PostMenuSingleton.PostMenu.PostMenu; import Singleton.PostMenuSingleton.PostMenuSingleton; import Singleton.Space.SpaceSingleton; import Singleton.SpeedometerSingleton.Speedometer.Speedometer; import Singleton.SpeedometerSingleton.SpeedometerSingleton; import Singleton.SpeedWorld.SpeedWorld.SpeedWorld; import Singleton.SpeedWorld.SpeedWorldSingleton; import Singleton.StartMenuSingleton.StartMenu.StartMenu; import Singleton.StartMenuSingleton.StartMenuSingleton; import Singleton.PointerAndRoundSpeedSingleton.PointerAndRoundSpeed.PointerAndRoundSpeed; import Singleton.PointerAndRoundSpeedSingleton.PointerAndRoundSpeedSingleton; public class PlayGame extends Sprite { private var space:Space; private var cat:CatBody; private var vectorMouse:Vector.<Object>; private var vectorBallonMouse:Vector.<Object>; private var pointerAndRoundSpeed:PointerAndRoundSpeed; private var speedometer:Speedometer; private var postMenu:PostMenu; private var speedWorld:SpeedWorld; private var positionObject:PositionObject = new PositionObject(); public function PlayGame() { space = SpaceSingleton.getSpaceSingleton.getSpace; cat = CatSingleton.getCatSingleton.getCat; //вектор Mouse vectorMouse = MouseSingleton.getMouseSingleton.getVectorMouse; //вектор BalloonMouse vectorBallonMouse = MouseBalloonSingleton.getMouseBalloonSingleton.getVectorMouse; // pointerAndRoundSpeed pointerAndRoundSpeed = PointerAndRoundSpeedSingleton.getPointerAndRoundSpeedSingleton.getPointerAndRoundSpeed; // speedometer = SpeedometerSingleton.getSpeedometerSingleton.getSpeedometer; postMenu = PostMenuSingleton.getPostMenuSingleton.getPostMenu; speedWorld = SpeedWorldSingleton.getSpeedWorldSingleton.getSpeedWorkd; addEventListener(Event.ADDED_TO_STAGE, init); } private var startMenu:StartMenu; private function init(e:Event):void { removeEventListener(Event.ADDED_TO_STAGE, init); //начальное меню var _startMenuSingleton:StartMenuSingleton = StartMenuSingleton.getStartMenuSingleton; startMenu = _startMenuSingleton.getStartMenu; addChild(startMenu); //stage.addEventListener(MouseEvent.CLICK, clickStartMenu); /////// this.addEventListener(StartStopReset.NEW_START, newStart);//создаю слушателя //слушатель есть, но он чёт глухой /////// } private function newStart(e:StartStopReset):void { trace(122223); } private var controlUser:ControlUser; private function clickStartMenu(e:MouseEvent):void { if ((e.target == startMenu.getStartButton) && (startMenu.stage != null)) { removeChild(startMenu); cat.visible = true; stage.addChild(pointerAndRoundSpeed); addChild(speedometer); controlUser = new ControlUser(); this.addChild(controlUser); } if (pointerAndRoundSpeed.stage != null) { controlUser.addEvent();//добавляет слушателей speedWorld.setSpeedWorld = speedWorld.getMaxSpeedWorld * pointerAndRoundSpeed.getPointer; stage.removeChild(pointerAndRoundSpeed); addEventListener(Event.ENTER_FRAME, updateSpace); } if ((e.target == postMenu.getResetButton) && (postMenu.stage != null)) { stage.removeChild(postMenu); stage.addChild(pointerAndRoundSpeed); positionObject.defoltPosition(); cat.visible = true; } } private function updateSpace(e:Event):void { space.step(1 / stage.frameRate); if ((speedWorld.getSpeedWorld == 0) && (pointerAndRoundSpeed.stage == null)) { stage.addChild(postMenu); removeEventListener(Event.ENTER_FRAME, updateSpace); controlUser.removeEvent(); } } } } Сам решил, хотя так и не понял, почему не работает класс SwitchEvent исключил и диспатчу событие сразу из StartMenu, должно быть без разницы, но увы, вместо сразу пишу тогда начинает работать хотел прост сделать отдельный класс, в котором собраны необходимые события, было бы удобно. Мож я где-то что-то недопонимаю, может SwitchEvent нужно было наследовать от Sprite (так делал изначально) и добавлять класс на сцену (изначально не добавлял на сцену, так как зачем?) |
|
|||||
Lorem ipsum
|
Так и должно работать. Дело в том, что в первом варианте событие посылал не твой StartMenu, а SwitchEvent, который ввиду его отсутствия на сцене (ты же нигде его не добавляешь) никакого всплытия своим событиям не обеспечил. Вот и выходит, что все работает, но только если подписаться на сам SwitchEvent. Ты просто допустил архитектурную ошибку, добавив методы newStart(), anew() и stop() в отдельный класс. Им самое место в классе StartMenu.
Цитата:
Цитата:
Добавлено через 5 минут Теперь немного о вещах, которые режут глаз. 1. package EventClass Понимай package как папки на компе. Это просто хранилище классов, но ни в коем случае не сам класс. Их принято именовать строчными латинскими символами без каких либо "-", "_" и т.д. В данном случае логично было бы как минимум назвать пак "events", чтобы стало понятно, что за классы лежат у тебя в этой папке. 2. public class StartStopReset extends Event Класс, наследуемый от Event логично бы как-то обозначить как событие, поэтому прямо просится назвать его как минимум StartStopResetEvent.
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Jun 2014
Сообщений: 558
|
Zebestov спасибо
По названием учту |
Часовой пояс GMT +4, время: 06:56. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|