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

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

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

Регистрация: Apr 2012
Сообщений: 3
Question не работают функции прописанные внутри цикла

Вот такой код:
Код AS3:
function onComplete(event:Event):void {				
				var recivedData = loader.data;
				var recivedDataArray:Array = JSON.decode(recivedData);
 
				//вычисляем длинну полученного массива
					var handLength = recivedDataArray.length;
				//создаен переменные для использования внутри цикла	
					var xCHCoor = 100;
					var yCHCoor = 600;
					var xCHOutlineCoor = 98;
					var yCHOutlineCoor = 598;
					var parametr = 0;
				//создаем массивы для того чтобы использовать их в цикеле для сериализации переменных
					var cardInHand:Array=[];
					var сardInHandOutline:Array=[];					
					for(var iOne: int = 0; iOne < handLength; iOne++){	
 
						//переводим текст полученный с сервера в название класса объекта
						var cardInHandClass:Class = getDefinitionByName(recivedDataArray[iOne]) as Class;
 
						//отображаем "карты на руках"					
						cardInHand[iOne] = new cardInHandClass();						
						cardInHand[iOne].x = xCHCoor;
						cardInHand[iOne].y = yCHCoor;
						addChild(cardInHand[iOne]);
						xCHCoor = xCHCoor + 80;
 
						//добавляем картинки "подсветки" карт
						сardInHandOutline[iOne] = new outlineForCardsInHandGreen();
						сardInHandOutline[iOne].x = xCHOutlineCoor;
						сardInHandOutline[iOne].y = yCHOutlineCoor;
						addChild(сardInHandOutline[iOne]);
						xCHOutlineCoor = xCHOutlineCoor +80;
						сardInHandOutline[iOne].visible = false;
 
					//активируем подсветку при наведении
						cardInHand[iOne].addEventListener(MouseEvent.MOUSE_OVER, function (e:MouseEvent):void{
								сardInHandOutline[iOne].visible = true;
							});
						cardInHand[iOne].addEventListener(MouseEvent.MOUSE_OUT, function (e:MouseEvent):void{
								сardInHandOutline[iOne].visible = false;
							});						
					}
			}
Все отображается как должно, НО при наведении курсора на любой из объектов серии cardInHand[iOne], вместо выполнения приписанной ему функции выскакивает ошибка: TypeError: Error #1010: Термин не определен и не имеет свойств. at MethodInfo-235()

Где ошибка?
Что я не так написал?

Старый 19.04.2012, 19:41
54321go вне форума Посмотреть профиль Отправить личное сообщение для 54321go Найти все сообщения от 54321go
  № 2  
Ответить с цитированием
54321go

Регистрация: Sep 2006
Сообщений: 453
Сделайте лучше отдельной функцией. а в ней вместо
Код AS3:
сardInHandOutline[iOne].visible = true;
сделаейте
Код AS3:
e.currentTarget.visible = true;

Старый 19.04.2012, 19:50
Andy_go вне форума Посмотреть профиль Отправить личное сообщение для Andy_go Найти все сообщения от Andy_go
  № 3  
Ответить с цитированием
Andy_go

Регистрация: Apr 2012
Сообщений: 3
Там по задумке появляется и исчезает рамочка вокруг основного объекта, а то что вы предложили приводит к исчезновению самого объекта

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

Регистрация: Mar 2010
Сообщений: 48
особенности областей видимости.
Функции работают, но во время выполнения iOne = handLength, то есть сardInHandOutline[iOne] = undefined
Всю эту конструкцию можно обернуть в вызов функции (Javascript-way):
Код AS3:
//активируем подсветку при наведении
( function ( card:InteractiveObject, outline:DisplayObject ):void {
	card.addEventListener( MouseEvent.MOUSE_OVER, function ( e:MouseEvent ):void {
		outline.visible = true;
	} );
	card.addEventListener( MouseEvent.MOUSE_OUT, function ( e:MouseEvent ):void {
		outline.visible = false;
	} );
} )( cardInHand[ iOne ], сardInHandOutline[ iOne ] );
Но я бы рекомендовал написать отдельный класс для карты:
Код AS3:
class CardInHand extends Sprite {
	private var body:InteractiveObject;
	private var outline:DisplayObject;
	public function CardInHand( bodyClass:Class, outlineClass:Class ) {
		body = new bodyClass();
		outline = new outlineClass();
		addChild( body );
		addChild( outline );
		outline.visible = false;
		addEventListener( MouseEvent.ROLL_OVER, onRollOver );
		addEventListener( MouseEvent.ROLL_OUT, onRollOut );
	}
	private function onRollOver( e:MouseEvent ):void {
		outline.visible = true;
	}
	private function onRollOut( e:MouseEvent ):void {
		outline.visible = false;
	}
}

Старый 19.04.2012, 21:10
54321go вне форума Посмотреть профиль Отправить личное сообщение для 54321go Найти все сообщения от 54321go
  № 5  
Ответить с цитированием
54321go

Регистрация: Sep 2006
Сообщений: 453
Ага не заметил можно передать в переменную
Код AS3:
сardInHand[iOne].clip=new MovieClip();
сardInHand[iOne].clip=сardInHandOutline
[iOne]
а потом вызывать
Код AS3:
e.currentTarget.clip.visible = true;
как-то так

Старый 19.04.2012, 22:25
Andy_go вне форума Посмотреть профиль Отправить личное сообщение для Andy_go Найти все сообщения от Andy_go
  № 6  
Ответить с цитированием
Andy_go

Регистрация: Apr 2012
Сообщений: 3
Спасибо за ответы.
54321go: ваш новый вариант выдает ошибку: 1120: Обращение несуществующего свойства сardInHand.

bublic_bicubic: этот вариант я сегодня уже не осилю(глаза в кучу под конец дня), завтра попробую и отпишу что получилось.

Добавлено через 19 часов 10 минут
bublic_bicubic: никак в толк не возьму как с классами, в том числе и с этим работать. Вот написал я его, а дальше с ним что делать? как его прикрутить к моему конкретному коду?
Не судите строго, я только начал разбираться в АS...

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

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

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


 


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


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