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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.07.2009, 12:42
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 11  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Цитата:
Сообщение от SONICTOM Посмотреть сообщение
Подскажите, пожалуйста, как можно рационально вызвать функцию fieldClick?
А что такое fieldClick? От того о каком объекте идет речь, зависит какие события ему доступны. И главное чего вы пытаетесь добиться?
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 14.07.2009, 15:52
SONICTOM вне форума Посмотреть профиль Отправить личное сообщение для SONICTOM Найти все сообщения от SONICTOM
  № 12  
Ответить с цитированием
SONICTOM
[+1.3 13.07.09]

Регистрация: Aug 2004
Сообщений: 24
Цитата:
Сообщение от SunShadow Посмотреть сообщение
А что такое fieldClick? От того о каком объекте идет речь, зависит какие события ему доступны. И главное чего вы пытаетесь добиться?
Посмтрите, пожалуйста, первый пост темы. Я там процитировал свой код.

Мне нужно, чтобы при клике мышкой вылетал патрон "shoot". Для этого я сделал мувиклип, поторый лежит на заднем плане, растянул его на всю рабочую область, и при клике по нему вызывается функция fieldClick, которая добавляет чайлд патрона и стартует его вылет.

Вот меня и интересуюе, есть ли какие-то более рациональные способы кликом мыши вызвать функцию fieldClick.

Если позволите, я потом задам еще несколько важных для меня вопросов.
Спасибо!

Старый 14.07.2009, 15:59
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 13  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Тогда подписывайте на событие stage на тот же самый клик что и для мувика. Прозрачный мувик тогда не нужен

Добавлено через 1 минуту
На сколько я понимаю у вас все в кадрах прописано. Это не рекомендуется для AS3. Код желательно выносить в классы. Выложи бы вы класс было видно от чего наследуется каждый объект, было бы понятно что с ними делать.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 14.07.2009, 16:18
SONICTOM вне форума Посмотреть профиль Отправить личное сообщение для SONICTOM Найти все сообщения от SONICTOM
  № 14  
Ответить с цитированием
SONICTOM
[+1.3 13.07.09]

Регистрация: Aug 2004
Сообщений: 24
Цитата:
Сообщение от SunShadow Посмотреть сообщение
Тогда подписывайте на событие stage на тот же самый клик что и для мувика. Прозрачный мувик тогда не нужен
Ага, так горадо проще.

Цитата:
Добавлено через 1 минуту
На сколько я понимаю у вас все в кадрах прописано. Это не рекомендуется для AS3. Код желательно выносить в классы. Выложи бы вы класс было видно от чего наследуется каждый объект, было бы понятно что с ними делать.
Я пока еще путаюсь в том, что делать, чтобы добиться конечной цели Немного привыкну буду в классы выносить. В классы лучше выность все или только то, что часто выплняется или может быть выполнено несколькими объектами?

Еще вот такие вопросы:

1. Допустим у меня вначале идет игровое меню. Как мне сделать так, чтобы весь мой игровой код начал выпоняться только после клика по кнопке старт? Зпихнуть весь код в класс и вызвать его кнопкой старт? И так же его удалить его призавершении игры?

2. Можно ли вызывать какую-то функцию не привязывая ее к объекту (Как например: mc1.addEventLiatener(Event.ENTER_FRAME, NameFunction)., а так, чтобы она вызывалась сама, при запуске флешки?


Последний раз редактировалось SONICTOM; 14.07.2009 в 16:22.
Старый 14.07.2009, 16:31
Мечтатель вне форума Посмотреть профиль Отправить личное сообщение для Мечтатель Найти все сообщения от Мечтатель
  № 15  
Ответить с цитированием
Мечтатель
 
Аватар для Мечтатель

Регистрация: Aug 2008
Адрес: 53 E
Сообщений: 60
SONICTOM, не совсем понятно, что ВЫ хотите реализовать...Вам нужно, чтобы приемник для события MouseEvent.CLICK выполнялся не по щелчку на прозрачное поле field, а на что тогда? Поподробнее, plz
__________________
04.08 1516 23:42

Старый 14.07.2009, 16:33
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 16  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Подход не правильный) Весь ваш мувик должен быть связан с неким классом, в котором запускаются процессы по загрузке, переходу на новые кадры по событиям и т.п. В случае с игровым меню для кнопок меню пишется общий класс "КНОПКА". А каждой отдельной кнопке присваивается класс наследник от "КНОПКА" с перекрытым методом по клик. Таким образом ваша кнопка старт должна при клике в классе генерировать событие "запуститьИгру". А класс главного мувика должен ловить это событие и переводить мувик к нужному кадру.
Таким образом ООП означает выделить объекты, определить их свойства и поведение и тогда уже писать для них классы. Чем более основательно вы спроектируете систему существования и взаимодействия объектов, тем легче будет делать и модифицировать. Универсальность когда в один класс все пихают не рациональна.
А на счет привычки, учитесь сразу правильно делать, это очень поможет в будущем. Весь код в классы. На кадрах только методы типа stop(), gotoAndStop() и т.д. Хотя в общем можно и без них обойтись)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 14.07.2009, 18:26
SONICTOM вне форума Посмотреть профиль Отправить личное сообщение для SONICTOM Найти все сообщения от SONICTOM
  № 17  
Ответить с цитированием
SONICTOM
[+1.3 13.07.09]

Регистрация: Aug 2004
Сообщений: 24
Цитата:
Сообщение от Мечтатель Посмотреть сообщение
SONICTOM, не совсем понятно, что ВЫ хотите реализовать...Вам нужно, чтобы приемник для события MouseEvent.CLICK выполнялся не по щелчку на прозрачное поле field, а на что тогда? Поподробнее, plz
SunShadow мне уже объяснил, что функцию по клику без использования прозрачного поля можно реализовать таким образом: stage.addEventListener(MouseEvent.CLICK, FunctionName)


Цитата:
Сообщение от SunShadow Посмотреть сообщение
Подход не правильный) Весь ваш мувик должен быть связан с неким классом, в котором запускаются процессы по загрузке, переходу на новые кадры по событиям и т.п. В случае с игровым меню для кнопок меню пишется общий класс "КНОПКА". А каждой отдельной кнопке присваивается класс наследник от "КНОПКА" с перекрытым методом по клик. Таким образом ваша кнопка старт должна при клике в классе генерировать событие "запуститьИгру". А класс главного мувика должен ловить это событие и переводить мувик к нужному кадру.
Таким образом ООП означает выделить объекты, определить их свойства и поведение и тогда уже писать для них классы. Чем более основательно вы спроектируете систему существования и взаимодействия объектов, тем легче будет делать и модифицировать. Универсальность когда в один класс все пихают не рациональна.
А на счет привычки, учитесь сразу правильно делать, это очень поможет в будущем. Весь код в классы. На кадрах только методы типа stop(), gotoAndStop() и т.д. Хотя в общем можно и без них обойтись)
Ничего не понял, но все равно спасибо за объяснения
Просто видео в моих видеоуроках это еще не описывалось.
Учили создавать классы в виде as файлов, где описывалось поведение спрайта, потом привязывали поведение объекта из бблиотеки к этому классу.
Думаю с этим разберуть потом. А пока у меня по прежнему проблемы с реализацией игры После попадания патрона во врага, оба удаляются и по их координатам появляется мувик с анимацией взрыва.
После снова вылазит ошибка:

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display:: DisplayObjectContainer/removeChild()
at g6_fla::MainTimeline/shootTrace()

Не пойму в чем дело
Вот текущий код:

Код AS3:
sam.addEventListener(Event.ENTER_FRAME, samTrace);
 
function samTrace(a:Event):void {
	sam.x=mouseX;
}
 
// Патрон
 
var shoot:sh=new sh;
var n:Number=1;
 
stage.addEventListener(MouseEvent.CLICK, fieldClick);
 
function fieldClick(a:MouseEvent):void {
	addChild(shoot);
	shoot.x=sam.x;
	shoot.y=sam.y-20;
	shoot.addEventListener(Event.ENTER_FRAME, shootTrace);
}
function shootTrace(a:Event):void {
	if (shoot.y>0) {
		shoot.y-=5;
		stage.removeEventListener(MouseEvent.CLICK, fieldClick);
		if (shoot.y<0) {
			shoot.removeEventListener(Event.ENTER_FRAME, shootTrace);
			removeChild(shoot);
			stage.addEventListener(MouseEvent.CLICK, fieldClick);
		}
	}
}
 
// Противник
var en:Enemy=new Enemy
var b:Number=1
en.addEventListener(Event.ENTER_FRAME, enStart)
 
function enStart(a:Event):void{
	if(b==1){
		addChild(en)
		en.y=-30
		en.x=Math.random()*550
		b=2
	}
	if(en.y<430){
		en.y+=5
	}
	else{
		b=1}
}
 
// Отслеживание попадания
 
stage.addEventListener(Event.ENTER_FRAME, hitTrace)
 
 
 
function hitTrace(a:Event):void{
	if(shoot.hitTestObject(en)){
		stage.removeEventListener(Event.ENTER_FRAME, hitTrace)
		boom.x=en.x
		boom.y=en.y
		boom.play()
		removeChild(shoot)
		removeChild(en)
 
	}
}


Последний раз редактировалось SONICTOM; 14.07.2009 в 18:38.
Старый 26.07.2009, 14:09
SONICTOM вне форума Посмотреть профиль Отправить личное сообщение для SONICTOM Найти все сообщения от SONICTOM
  № 18  
Ответить с цитированием
SONICTOM
[+1.3 13.07.09]

Регистрация: Aug 2004
Сообщений: 24
Братцы, не оставьте, пожалуйста, без помощи!

Старый 10.05.2016, 23:58
Azrael вне форума Посмотреть профиль Отправить личное сообщение для Azrael Найти все сообщения от Azrael
  № 19  
Ответить с цитированием
Azrael
 
Аватар для Azrael

Регистрация: Sep 2015
Сообщений: 69
Скажите почему возникает эта ошибка в моем случае?
Решил вынести код игрового меню из main в отдельный класс. Появилась эта ошибка касательно переменных AboutText и myFormat. В main этот код работал, а в новом (своем) классе уже нет.
Код AS1/AS2:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.display.*;
	import flash.events.MouseEvent;
	import flash.system.fscommand;
	import flash.text.*;
 
	public class MenuScreen extends Sprite 
	{
		var myFormat:TextFormat = new TextFormat();	
		var AboutText:TextField = new TextField();
 
		var btn_play:MyButtonClass = new MyButtonClass();
		var btn_opt:MyButtonClass = new MyButtonClass();
		var btn_inst:MyButtonClass = new MyButtonClass();
		var btn_abt:MyButtonClass = new MyButtonClass();
		var btn_ext:MyButtonClass = new MyButtonClass();
 
 
		myFormat.font = "Times New Roman";
		myFormat.size = 20;
		 myFormat.color = 0x000000;				
 
		AboutText.width = 550;
		AboutText.height = 250;
		AboutText.x = 225;
		AboutText.y = 80;
		AboutText.selectable = false;
		AboutText.setTextFormat(myFormat);
		addChild(AboutText);
 
		public function MenuScreen() 
				{
				super();
 
 
					btn_play.name = "btn_PLAY";
					btn_play.label = "Play";
					btn_play.addEventListener(MouseEvent.CLICK, btnMouseHandle);
					addChild(btn_play).y = 50;
					btn_play.x = 80
 
 
					btn_opt.name = "btn_OPTIONS";
					btn_opt.label = "Options"
					btn_opt.addEventListener(MouseEvent.CLICK, btnMouseHandle);
					addChild(btn_opt).y = 100;
					btn_opt.x = 80
 
 
					btn_inst.name = "btn_INSTRUCTIONS";
					btn_inst.label = "Instructions"
					btn_inst.addEventListener(MouseEvent.CLICK, btnMouseHandle);
					addChild(btn_inst).y = 150;
					btn_inst.x = 80
 
 
					btn_abt.name = "btn_ABOUT";
					btn_abt.label = "About"
					btn_abt.addEventListener(MouseEvent.CLICK, btnMouseHandle);
					addChild(btn_abt).y = 200;
					btn_abt.x = 80
 
 
					btn_ext.name = "btn_EXIT";
					btn_ext.label = "Exit"
					btn_ext.addEventListener(MouseEvent.CLICK, btnMouseHandle);
					addChild(btn_ext).y = 250;
					btn_ext.x = 80
				}
 
		function btnMouseHandle(e:MouseEvent):void
				{					
					switch(e.target.name){
						case "btn_PLAY":
							var TestSWC:MovieClip = new WSymbol_mc;
							trace("btn_01 click");
							TestSWC.x = 50;
							TestSWC.y = 50;
							addChild(TestSWC);
							break;
						case "btn_OPTIONS":
							trace("btn_02 click");
							break;
						case "btn_INSTRUCTIONS":
							trace("btn_03 click");
							ShowTextBlock (e.target.name);
							break;
						case "btn_ABOUT":
							trace("btn_04 click");
							ShowTextBlock (e.target.name);
							break;
						case "btn_EXIT":
							trace("btn_05 click");
							fscommand('quit');
							break;
					}
				}
 
		function ShowTextBlock (strID:String):void
				{		
					if (strID == "btn_INSTRUCTIONS")
						{
							trace("INS");
							AboutText.text = "Some text here";
						}
					else 
						{
							trace("AB");
							myFormat.align = TextFormatAlign.CENTER;
							myFormat.leading = 10;
							AboutText.defaultTextFormat = myFormat;
							AboutText.text = "Some text here";
						}
				}
 
	}
 
}
Main

Код AS1/AS2:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.display.*;
	import flash.events.MouseEvent;
	import flash.system.fscommand;
	import flash.text.*;
 
	public class Main extends Sprite
	{
 
		var MScreen:MenuScreen = new MenuScreen;
 
 
 
		public function Main():void
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			addChild(MScreen);
 
 
		}
 
	}
 
}

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

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

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


 


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


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