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

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

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
import Event.StartStopReset;
import Event.SwitchEvent;
найдите другое слово для названия пакета.
__________________
Reality.getBounds(this);

Старый 19.01.2016, 12:02
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 22  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
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!

Старый 20.01.2016, 13:14
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 23  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Спасибо
Я новичок+забросил флеш на пол года, надобно быть более внимательным

И с нова косяк, ну тут я вообще не понимаю, должно работать
Не могу поймать событие, хотя диспатчится и возвращает true
скину все, в каком виде сейчас
Своё событие
Код AS3:
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");
		}
	}
}
класс, который отправляет события
Код AS3:
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));
		}
	}
}
вот класс игрового меню (родитель Sprite), мы нажимает на кнопку, в зависимости от нажатой кнопки должно отсылаться своё событие. Для примера только одна кнопка
Код AS3:
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;
		}
	}
}
в этом классе я жду события
Код AS3:
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();
			}
		}
	}
}
Добавлено через 1 час 35 минут
Сам решил, хотя так и не понял, почему не работает
класс SwitchEvent исключил и диспатчу событие сразу из StartMenu, должно быть без разницы, но увы, вместо
Код AS3:
switchEvent.newStart();
сразу пишу
Код AS3:
dispatchEvent(new StartStopReset (StartStopReset.NEW_START, true, false));
тогда начинает работать
хотел прост сделать отдельный класс, в котором собраны необходимые события, было бы удобно. Мож я где-то что-то недопонимаю, может SwitchEvent нужно было наследовать от Sprite (так делал изначально) и добавлять класс на сцену (изначально не добавлял на сцену, так как зачем?)

Старый 20.01.2016, 15:16
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 24  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от neonoviiwolf Посмотреть сообщение
вместо … сразу пишу … тогда начинает работать
Так и должно работать. Дело в том, что в первом варианте событие посылал не твой StartMenu, а SwitchEvent, который ввиду его отсутствия на сцене (ты же нигде его не добавляешь) никакого всплытия своим событиям не обеспечил. Вот и выходит, что все работает, но только если подписаться на сам SwitchEvent. Ты просто допустил архитектурную ошибку, добавив методы newStart(), anew() и stop() в отдельный класс. Им самое место в классе StartMenu.
Цитата:
Сообщение от neonoviiwolf Посмотреть сообщение
хотел прост сделать отдельный класс, в котором собраны необходимые события, было бы удобно.
И у тебя это вышло. Все норм.
Цитата:
Сообщение от neonoviiwolf Посмотреть сообщение
Мож я где-то что-то недопонимаю, может SwitchEvent нужно было наследовать от Sprite.
Нет, его просто нужно удалить как ненужное звено.

Добавлено через 5 минут
Теперь немного о вещах, которые режут глаз.

1. package EventClass
Понимай package как папки на компе. Это просто хранилище классов, но ни в коем случае не сам класс. Их принято именовать строчными латинскими символами без каких либо "-", "_" и т.д. В данном случае логично было бы как минимум назвать пак "events", чтобы стало понятно, что за классы лежат у тебя в этой папке.

2. public class StartStopReset extends Event
Класс, наследуемый от Event логично бы как-то обозначить как событие, поэтому прямо просится назвать его как минимум StartStopResetEvent.
__________________
Поймай яблоко 2!

Старый 20.01.2016, 15:44
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 25  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Zebestov спасибо
По названием учту

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

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

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


 


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


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