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

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

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

Регистрация: Feb 2010
Сообщений: 811
Отправить сообщение для Universe с помощью ICQ Отправить сообщение для Universe с помощью Skype™
По умолчанию Ошибка null объекта

Делаю выпадающий список, возникла проблема при очищении выпадающих ссылок при наведении на основные ссылки! Ошибка возникает когда основная ссылка не содержит под-ссылок! Проблема в том, что я не могу понять, кто в данном случае является null'ом! Перепробывал кучу вариантов с if(mc != null) и чтото они не дали результатов! Помогите разобраться! Ошибку вызывает функция clearSubLinks

Код AS3:
var xml:XML;
var mainLink_txt:TextField;
var subLinks_txt:TextField;
var mainLink_mc:Sprite;
var subLink_mc:Sprite;
var subLinkContainer_mc:Sprite = new Sprite();
var xmlLoader:URLLoader = new URLLoader();
var upSubLinks_arr:Array = new Array();
var downSubLinks_arr:Array = new Array();
 
xmlLoader.load(new URLRequest("xml/headerLinks.xml"));
 
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
 
var myLink:String = "www.google.com";
var myName:String = "google";
//myText.htmlText = "<a href='" + myLink + "' >" + myName + "</a>";
 
function xmlLoaded(e:Event):void
{
	//trace(e.target.data);
	xml = new XML(e.target.data);
	placeMainLinks("top");
	placeMainLinks("bottom");
	main_bg2.y = stage.stageHeight - main_bg2.height; 
	downMainLinks.y = stage.stageHeight - downMainLinks.height;
}
 
function clearSubLinks(e:MouseEvent):void
{
		var childsNum:uint;
		trace("ETarget" + subLink_mc.parent.name);
		//upSubLinks.removeChild(subLinkContainer_mc);
 
			if(subLink_mc.parent != null)
			{
			childsNum = subLink_mc.parent.numChildren;
 
			for(var i:uint; i < childsNum; i++)
			{
					subLink_mc.parent.removeChild(subLink_mc.parent.getChildAt(0));
			}
			}
 
		//subLink_mc.parent.removeChild(subLink_mc);
		//subLink_mc.parent.parent.removeChild(subLink_mc.parent);
		trace("LINKS REMOVED");
		upSubLinks.visible = false;
		downSubLinks.visible = false;
}
 
subLinkContainer_mc.x = 100;
var myFormat:TextFormat = new TextFormat();
		myFormat.font = "Arial";
		myFormat.size = 12;
		myFormat.color = 0x000000;
		myFormat.italic = false;
		myFormat.bold = true;
		myFormat.align = TextFormatAlign.JUSTIFY;
 
upSubLinks.visible = false;
downSubLinks.visible = false;
 
function placeMainLinks(level:String):void
{
	var xmlLevel:XMLList;
	var linkHolder:MovieClip;
	var distanceX:Number = 0;
 
	if(level == "top")
	{
		xmlLevel = xml.topLinks.link;
		linkHolder = upMainLinks;
		//trace(xmlLevel.length());
	}
	else if(level == "bottom")
	{
		xmlLevel = xml.bottomLinks.link;
		linkHolder = downMainLinks;
	}
	for(var i:uint; i< xmlLevel.length(); i++)
	{
		mainLink_txt =  new TextField();
		mainLink_mc = new Sprite();
		mainLink_mc.name =String(i);
		mainLink_txt.htmlText = "<a href='" + xmlLevel[i].@url + "' >" + xmlLevel[i].@name + "</a>";
		mainLink_txt.setTextFormat(myFormat);
		mainLink_txt.selectable = false;
		mainLink_txt.autoSize = TextFieldAutoSize.LEFT;
		mainLink_txt.antiAliasType = flash.text.AntiAliasType.NORMAL;
		//trace(mainLink_txt.width);
		//mainLink_txt.embedFonts = true;
		mainLink_txt.border = false;
		//mainLink_mc.buttonMode = true;
		mainLink_mc.addChild(mainLink_txt);
		linkHolder.addChild(mainLink_mc);
		mainLink_mc.x =	distanceX;
		distanceX +=  mainLink_txt.width + 15;
		mainLink_mc.addEventListener(MouseEvent.ROLL_OVER, clearSubLinks);
		mainLink_mc.addEventListener(MouseEvent.ROLL_OVER, rollMainLink);
	}
}
 
function placeSubLinks(level:String, number:String):void
{
	var  xmlSubLevel:XMLList;
	var subLinkHolder:Sprite;
	var sub_bg:Sprite;
 
	//trace("NUMBER " + number);
	if(level == "top")
	{
		xmlSubLevel = xml.topLinks.link[uint(number)].sublink;
		subLinkHolder = upSubLinks;
		sub_bg = upSubLinks.sub_bg;
		//trace("LENGTH " + xmlSubLevel)
	}
	else if(level == "bottom")
	{
		xmlSubLevel = xml.bottomLinks.link[uint(number)].sublink;
		subLinkHolder = downSubLinks;
		sub_bg = downSubLinks.sub_bg;
	}
	trace("xmlSubLevel.length()" + xmlSubLevel.length());
	if( xmlSubLevel.length() > 0)
	{
	for(var i:uint; i < xmlSubLevel.length(); i++)
	{
		subLinks_txt =  new TextField();
		subLink_mc = new Sprite();
		subLinks_txt.htmlText = "<a href='" + xmlSubLevel[i].@url + "' >" + xmlSubLevel[i].@name + "</a>";;
		subLinks_txt.setTextFormat(myFormat);
		subLinks_txt.selectable = false;
		subLinks_txt.autoSize = TextFieldAutoSize.LEFT;
		subLinks_txt.antiAliasType = flash.text.AntiAliasType.NORMAL;
		subLinks_txt.embedFonts = true;
		subLinks_txt.border = false;
		subLinks_txt.name = "subLink_txt" + i;
		subLink_mc.buttonMode = true;
		subLink_mc.addChild(subLinks_txt);
		//subLink_mc
		subLink_mc.name = "subLink" + i;
		subLinkContainer_mc.addChild(subLink_mc);
 
		subLinkHolder.addChild(subLinkContainer_mc);
		subLink_mc.y = subLink_mc.height * i;
	}
	subLinkContainer_mc.name = "subLinksContainer";
	sub_bg.height = subLinkContainer_mc.height;
	if(level == "bottom")
	{
		subLinkHolder.y = stage.stageHeight - 25 - subLinkContainer_mc.height;
	}
	subLinkHolder.addEventListener(MouseEvent.ROLL_OUT, clearSubLinks);
	}
}
 
function rollMainLink(e:MouseEvent):void
{
	trace("TARGET " + e.target.name);
	if(e.target.parent.name == "upMainLinks")
	{
		upSubLinks.visible = true;
 
		placeSubLinks("top", e.target.name);
	}
	else if(e.target.parent.name == "downMainLinks")
	{
		downSubLinks.visible = true; 
		placeSubLinks("bottom", e.target.name);
	}
	subLinkContainer_mc.x = e.target.x;
	//trace(e.target.name);
	//e.target.addEventListener(MouseEvent.ROLL_OUT, rollOutMainLink);
}
 
function rollOutMainLink(e:MouseEvent):void
{
	//trace(e.target.parent.name);
	if(e.target.parent.name == "upMainLinks")
	{
		upSubLinks.visible = false;
	}
	else if(e.target.parent.name == "downMainLinks")
	{
		downSubLinks.visible = false;
	}
}

Старый 14.07.2010, 15:20
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 2  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
2 Universe:
А что, debug не указал номер строки с ошибкой?
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

Старый 14.07.2010, 17:13
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 3  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
Думаю дело в parent, к нему можно обращаться только после добавления объекта в контейнер. Кстати, проверять проще так:
Код AS3:
trace(subLink_mc.parent);

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

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

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


 


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


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