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

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

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

Регистрация: May 2011
Адрес: Севастополь
Сообщений: 15
Attention Не отслеживаются события

Доброго времени суток.
Прошу помочь разобраться с кодом.
Пишу меню на as3.0

Работаю с классами.
Есть 2 класса.
1 класс это сборщик (т.е. главный класс) 2 класс меню.

На главной сцене есть мувиклип, в который я добавляю меню, и вешаю события на кнопки, который расположены в меню. И вот проблема - события не отслеживаются...

Код 1 класса:
Код AS3:
package  {
	import flash.display.Sprite;
	import flash.display.MovieClip;
	import com.rad.*;
 
	public class Main extends Sprite {
 
		private var mainMenu:MainMenu = new BaseMenu;
 
		public function Main(){
 
 
			mainMenu.addMainMenu(168, 170);
			container.addChild(mainMenu);
 
		}
	}
}
код класса меню:
Код AS3:
package com.rad {
	import flash.display.Sprite;
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
 
	public class MainMenu extends Sprite {
 
		public function MainMenu() {
 
		}
 
		public function addMainMenu(X:int,Y:int):void {
			this.x = X;
			this.y = Y;
 
			for (var i:int = 0; i <= this.numChildren; i++) {
				var	one:Sprite =  this.getChildByName("menuItem_"+i) as Sprite;
				if (one) {
				 one.addEventListener(MouseEvent.CLICK, f_onMouseClick);
				}
			}
 
		}
 
		private function f_onMouseClick(e:MouseEvent):void {
			//e.stopImmediatePropagation ();
			mouseChildren = false;
			trace (e.target.name);
		}
 
	}
 
}
Заранее спасибо.

Старый 30.01.2012, 16:30
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
private var mainMenu:MainMenu = new BaseMenu;
На этапе компиляции должна быть ошибка, если MainMenu не интерфейс который имплементирует BaseMenu)))

Цитата:
for (var i:int = 0; i <= this.numChildren; i++) {
У вас нету ни одного дитя, чего вы прогоняете цикл с 0 ?)

Цитата:
if (one) {
Поставьте там трейс и поглядите, хоть один раз условие то выполняется?))
__________________
Марк Tween

Старый 30.01.2012, 16:38
shmblra вне форума Посмотреть профиль Отправить личное сообщение для shmblra Найти все сообщения от shmblra
  № 3  
Ответить с цитированием
shmblra

Регистрация: May 2011
Адрес: Севастополь
Сообщений: 15
Забыл написать что в мувиклипе MainMenu расположены 4 кнопки.

Цыкл действительно не выполнялся потому, что, я забыл кнопкам прописать instance name "itemMenu_"

теперь все работает.

Если вдруг, кто - то сталкнется с такой же проблемой как и я, может будет полезно прочить данный топик.

in4core - спасибо, за то, что ответили

Добавлено через 22 часа 56 минут
Не стал создавать новую тему, так как, все это относится к событиям.

Проблема в том, что есть мувиклип, внутри него расположено динамическое текстовое поле.
На кнопке повешено 3 события, Mouse_CLICK, Mouse_Over, Mouse_Out.
Суть проблемы - события работают нормально если курсор не заходит в область текстового поля, а если курсор над текстовым полем кидает ошибки что я обращаюсь к 0 и ничего не работает.

Как отключить события с текстового поля?

Писал и mouseEnabled = false и mouseChildren = false - не помогает...

ошибка:
Код AS3:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
Помогите разобраться с проблемой

Старый 01.02.2012, 15:16
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
покажите весь код, у вас где то переменная не определена. А mouseChildren = false надо не для текстового поля делать а для мувика в котором текст лежит
__________________
Марк Tween

Старый 02.02.2012, 12:26
shmblra вне форума Посмотреть профиль Отправить личное сообщение для shmblra Найти все сообщения от shmblra
  № 5  
Ответить с цитированием
shmblra

Регистрация: May 2011
Адрес: Севастополь
Сообщений: 15
Класс MainMenu
Код AS3:
package com.rad {
	import flash.display.Sprite;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import com.greensock.TweenLite;
	/**
	 * ...
	 * @author shmblra
	 */
	public class MainMenu extends Sprite {
 
		public var checkSound:Boolean;
		public var checkSlojnost:Boolean;
 
		public function MainMenu() {
			checkSound = false;
			checkSlojnost = false;
		}
 
		public function addMainMenu(X:int,Y:int):void {
			this.x = X;
			this.y = Y;
 
			for (var i:int = 0; i <= this.numChildren; i++) {
				var	one:Sprite =  this.getChildByName("item_"+i) as Sprite;
				if (one) {
				 one.addEventListener(MouseEvent.CLICK, f_onMouseClick);
				 one.addEventListener(MouseEvent.MOUSE_OVER, f_onMouseOver);
				 one.addEventListener(MouseEvent.MOUSE_OUT, f_onMouseOut);
				}
			}
 
		}
 
		private function f_onMouseClick(e:MouseEvent):void {
			//e.stopImmediatePropagation ();
			switch (e.target.name) {
				case "item_1":
					trace ('play');
				break;
				case "item_2":
					trace ('option');
					TweenLite.to(this, 1, { y: -35 } );
				break;
				case "item_3":
					trace ('how play');
					TweenLite.to(this, 1, { y: -240 } );
				break;
				case "item_4":
					trace ('about');
					TweenLite.to(this, 1, { y: -450 } );
				break;
				case "item_5":
					trace ('sound');
					if (!checkSound) {
						item_5.sound_txt.text = "выкл.";
						checkSound = true;
					}else {
						item_5.sound_txt.text = "вкл.";
						checkSound = false;
					}
 
				break;
				case "item_6":
					trace ('slojnost');
					if (!checkSlojnost) {
						item_6.slojnost_txt.text = "легко";
						checkSlojnost = true;
					}else {
						item_6.slojnost_txt.text = "тяжело";
						checkSlojnost = false;
					}
				break;
				case "item_7":
					trace ('return');
					TweenLite.to(this, 1, { y:170 } );
				break;
				case "item_8":
					TweenLite.to (this,1,{y:170});
				break;
				case "item_9":
					TweenLite.to(this, 1, { y:170 } );
				break;
 
			}
 
		}
 
		private function f_onMouseOver (e:MouseEvent):void {
			var selectItem:SelectItem = e.target as SelectItem;
			selectItem.gotoAndStop(2);
			selectItem.mouseChildren = false;
		}
 
		private function f_onMouseOut (e:MouseEvent):void {
			var selectItem:SelectItem = e.target as SelectItem;
			selectItem.gotoAndStop(1);
		}
 
	}
 
}
Класс SelectItem
Код AS3:
package com.rad {
	import flash.display.MovieClip;
	import flash.text.TextField;
	/**
	 * ...
	 * @author shmblra
	 */
	public class SelectItem  extends MovieClip{
 
		public function SelectItem() {
			stop ();
		}
	}
}
Ошибка данная все одно присутствует ... На полях где я присваиваю в текстовые поля внутри мувиклипа значение...

Старый 02.02.2012, 12:39
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 6  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Код AS3:
for (var i:int = 0; i <  this.numChildren; i++) 
{
    var one:Sprite =  this.getChildByName("item_"+i) as Sprite;
    if (one) 
   {
         one.mouseChildren = false;
	 one.addEventListener(MouseEvent.CLICK, f_onMouseClick);
	 one.addEventListener(MouseEvent.MOUSE_OVER, f_onMouseOver);
	 one.addEventListener(MouseEvent.MOUSE_OUT, f_onMouseOut);
   }
}
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 02.02.2012, 13:49
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 7  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
больше чем Gbee - подсказать нечего
__________________
Марк Tween

Старый 02.02.2012, 15:07
shmblra вне форума Посмотреть профиль Отправить личное сообщение для shmblra Найти все сообщения от shmblra
  № 8  
Ответить с цитированием
shmblra

Регистрация: May 2011
Адрес: Севастополь
Сообщений: 15
Огромное Всем спасибо!

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

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

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


 


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


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