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

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

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

Регистрация: Dec 2008
Адрес: Севастополь
Сообщений: 112
Отправить сообщение для cdc7600 с помощью ICQ
По умолчанию Как элементы массива добавить на сцену?

Есть массив из элементов мувиков (карт Таро), собираюсь рендомом выбирать карты, но обратиться к элементу массива и добавить в клип не получается
Код AS3:
var card_a:Array = new Array();
 
 
	var card_a0:MovieClip = new c0();
	var card_a1:MovieClip = new c1();
	var card_a2:MovieClip = new c2();
	var card_a3:MovieClip = new c3();
	var card_a4:MovieClip = new c4();
	var card_a5:MovieClip = new c5();
	var card_a6:MovieClip = new c6();
	var card_a7:MovieClip = new c7();
	var card_a8:MovieClip = new c8();
	var card_a9:MovieClip = new c9();
	var card_a10:MovieClip = new c10();
	var card_a11:MovieClip = new c11();
	var card_a12:MovieClip = new c12();
	var card_a13:MovieClip = new c13();
	var card_a14:MovieClip = new c14();
	var card_a15:MovieClip = new c15();
	var card_a16:MovieClip = new c16();
	var card_a17:MovieClip = new c17();
	var card_a18:MovieClip = new c18();
	var card_a19:MovieClip = new c19();
	var card_a20:MovieClip = new c20();
	var card_a21:MovieClip = new c21();
 
    for(var i:Number = 0; i<22; i++){
	card_a.push(card_a+"i");
	}
__________________
cdc7600.livejournal.com

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Код AS1/AS2:
for(var i:Number = 0; i<22; i++){
	super.addChild(card_a[i]);
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Регистрация: Dec 2008
Адрес: Севастополь
Сообщений: 112
Отправить сообщение для cdc7600 с помощью ICQ
не вариант, уже пробовала )
__________________
cdc7600.livejournal.com

Старый 18.03.2009, 12:22
Alkaz вне форума Посмотреть профиль Отправить личное сообщение для Alkaz Найти все сообщения от Alkaz
  № 4  
Ответить с цитированием
Alkaz

Регистрация: May 2006
Адрес: Нск
Сообщений: 91
если вопрос заключается в добавлении в массив то объявлять и добавлять в массив карты имхо проще так:
Код AS3:
for(var i:Number = 0; i<22; i++){
        var cardClass:Class = getDefinitionByName("c"+i) as Class;
        var card:MovieClip = new cardClass();
        куда_нужно.addChild(card);
	card_a.push(card);
	}
и еще у вас ошибка имеется, кавычки должны стоять так:
Код AS3:
card_a.push("card_a"+i);
upd: невнимательно прочитал тему, проапдейтил код.


Последний раз редактировалось Alkaz; 18.03.2009 в 12:27.
Старый 18.03.2009, 12:33
cdc7600 вне форума Посмотреть профиль Отправить личное сообщение для cdc7600 Найти все сообщения от cdc7600
  № 5  
Ответить с цитированием
cdc7600
 
Аватар для cdc7600

Регистрация: Dec 2008
Адрес: Севастополь
Сообщений: 112
Отправить сообщение для cdc7600 с помощью ICQ
спасибо за кавычки, продинамила )

при добавлении типа
Код AS3:
super.addChild(card_a[0]);
появляется ошибенция
cannot convert "card_a0" to flash.display.DisplayObject



верхний не работал.. угу ) ща потестим... странно , что перестало работать, то что работало ))

мне не все нужно добавлять элементы
__________________
cdc7600.livejournal.com


Последний раз редактировалось cdc7600; 18.03.2009 в 12:39.
Старый 18.03.2009, 12:46
cdc7600 вне форума Посмотреть профиль Отправить личное сообщение для cdc7600 Найти все сообщения от cdc7600
  № 6  
Ответить с цитированием
cdc7600
 
Аватар для cdc7600

Регистрация: Dec 2008
Адрес: Севастополь
Сообщений: 112
Отправить сообщение для cdc7600 с помощью ICQ
воспользовалась
Цитата:
Сообщение от cdc7600 Посмотреть сообщение
перестало работать, то что работало ))
Код AS3:
card1.card_ins.addChild(card_a[0] as DisplayObject);
Parameter child must be non-null.
at flash.display:isplayObjectContainer/addChild()

жесть) не стоило переходить, наверное, на ас3.. )
__________________
cdc7600.livejournal.com

Старый 18.03.2009, 12:35
Alkaz вне форума Посмотреть профиль Отправить личное сообщение для Alkaz Найти все сообщения от Alkaz
  № 7  
Ответить с цитированием
Alkaz

Регистрация: May 2006
Адрес: Нск
Сообщений: 91
ну соответственно не забываем о приведении типов
Код AS3:
super.addChild(card_a[0] as DisplayObject);
хотя я прогнал что-то. по идее и без этого должно добавляться. вы моим кодом воспользовались?


Последний раз редактировалось Alkaz; 18.03.2009 в 12:38.
Старый 18.03.2009, 12:49
Alkaz вне форума Посмотреть профиль Отправить личное сообщение для Alkaz Найти все сообщения от Alkaz
  № 8  
Ответить с цитированием
Alkaz

Регистрация: May 2006
Адрес: Нск
Сообщений: 91
ну почему сейчас ошибка возникает - понятно, дисплей обжектом то что вы пытаетесь добавить явно не является. ну выложите более полный код. то что предложил я у меня вполне даже работает.
а на АС3 переходить думаю еще как стоит

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

Регистрация: Dec 2008
Адрес: Севастополь
Сообщений: 112
Отправить сообщение для cdc7600 с помощью ICQ
вот такой вот быдло-код
чё-то не могу разобраться как всё в классы затулить )
Код AS3:
import flash.display.MovieClip;
 
function personal_gadanie(event : MouseEvent):void {
	var personal1:MovieClip = new personal_class();
//четыре карты для предсказания :D
	var card1:MovieClip = new card();
	var card2:MovieClip = new card();
	var card3:MovieClip = new card();
	var card4:MovieClip = new card();
 
	var card_a:Array = new Array();
 
	// 22 карты, которые могут выпасть 
 
	var card_a0:MovieClip = new c0();
	var card_a1:MovieClip = new c1();
	var card_a2:MovieClip = new c2();
	var card_a3:MovieClip = new c3();
	var card_a4:MovieClip = new c4();
	var card_a5:MovieClip = new c5();
	var card_a6:MovieClip = new c6();
	var card_a7:MovieClip = new c7();
	var card_a8:MovieClip = new c8();
	var card_a9:MovieClip = new c9();
	var card_a10:MovieClip = new c10();
	var card_a11:MovieClip = new c11();
	var card_a12:MovieClip = new c12();
	var card_a13:MovieClip = new c13();
	var card_a14:MovieClip = new c14();
	var card_a15:MovieClip = new c15();
	var card_a16:MovieClip = new c16();
	var card_a17:MovieClip = new c17();
	var card_a18:MovieClip = new c18();
	var card_a19:MovieClip = new c19();
	var card_a20:MovieClip = new c20();
	var card_a21:MovieClip = new c21();
 
    for(var i:Number = 0; i<22; i++){
	card_a.push("card_a"+i);
	}
 
	// добавляю на сцену 4 карты, типа под курсором
	addChildAt(personal1,getChildIndex(cursor1)-1);
	personal1.addChild(card1);
	personal1.addChild(card2);
	personal1.addChild(card3);
	personal1.addChild(card4);
	//координаты карт 
	card1.x=111.5;
	card1.y=205.5;
	card2.x=223.5;
	card2.y=205.5;
	card3.x=111.5;
	card3.y=363.4;
	card4.x=223.5;
	card4.y=363.4;
 
   //движ
	var move_tw1:Tween = new Tween(resume1,"x",Regular.easeInOut,this.x,-709,2,true);
	var move_tw2:Tween = new Tween(personal1,"x",Regular.easeInOut,709,0,2,true);
 
 // а вот тут я пытаюсь втулить а символ хотя бы первую карту, в дольейшем это какбе рендом
	card1.card_ins.addChild(card_a[0] as DisplayObject);
 
// эксит
	personal1.exit_but.addEventListener(MouseEvent.CLICK, exit_t);
	move_tw1.addEventListener(TweenEvent.MOTION_FINISH, onMovefinish);
 
 
 
	//переворот карт
	function onMovefinish(event:TweenEvent):void {
		removeChild(resume1);
		var intervalId1:uint = setTimeout(Que, 1000);
 
		card1.play();
		//card_a[0]
		function Que():void {
			card2.play();
			var intervalId2:uint = setTimeout(Que1, 1000);
			function Que1():void {
				card3.play();
				var intervalId3:uint = setTimeout(Que2, 1000);
				function Que2():void {
					card4.play();
				}
			}
		}
 
		/*добавляем функции обработки нажатия карт, пока их неть*/
		card1.addEventListener(MouseEvent.CLICK, function_card1);
		card2.addEventListener(MouseEvent.CLICK, function_card2);
		card3.addEventListener(MouseEvent.CLICK, function_card3);
		card4.addEventListener(MouseEvent.CLICK, function_card4);
 
 
		function function_card1(event:MouseEvent):void {
 
		}
		function function_card2(event:MouseEvent):void {
 
		}
		function function_card3(event:MouseEvent):void {
 
		}
		function function_card4(event:MouseEvent):void {
 
		}
	}
	function exit_t(event:MouseEvent):void {
		var move_tw3:Tween = new Tween(personal1,"alpha",Regular.easeInOut,1,0,1,true);
 
		// тут ремувить листенеры
		personal1.exit_but.removeEventListener(MouseEvent.CLICK, exit_t);
		/*card1.removeEventListener(MouseEvent.CLICK, function_card1);
		card2.removeEventListener(MouseEvent.CLICK, function_card2);
		card3.removeEventListener(MouseEvent.CLICK, function_card3);
		card4.removeEventListener(MouseEvent.CLICK, function_card4);*/
 
 
		move_tw3.addEventListener(TweenEvent.MOTION_FINISH, remove);
		function remove(event:TweenEvent):void {
			removeChild(personal1);
 
			per_bt.addEventListener(MouseEvent.ROLL_OVER, per_onRollOver);
			analiz_bt.addEventListener(MouseEvent.ROLL_OVER, analiz_onRollOver);
			yesno_bt.addEventListener(MouseEvent.ROLL_OVER, yesno_onRollOver);
			exit_bt.addEventListener(MouseEvent.ROLL_OVER, exit_onRollOver);
 
			/* включаем кнопки меню*/
			per_bt.addEventListener( MouseEvent.CLICK, personal_magic);
 
 
		}
 
		menu_sb.alpha=1;
 
 
 
	}
 
}
 
function random_card():void {
 
}
__________________
cdc7600.livejournal.com

Старый 18.03.2009, 13:41
Alkaz вне форума Посмотреть профиль Отправить личное сообщение для Alkaz Найти все сообщения от Alkaz
  № 10  
Ответить с цитированием
Alkaz

Регистрация: May 2006
Адрес: Нск
Сообщений: 91
суровый код не осилил
ваша главная проблема в том что вы добавляете в массив не карту а строку, в вашем варианте попробуйте объявить переменные не внутри функции и:
Код AS3:
card_a.push(this["card_a"+i]);
чтобы по идее работало как я сказал попробуйте не объявлять переменные card_a0..card_a21, а один лишь массив и вместо вашего цикла вставки карт в массив напишите мой цикл который с getDefinitionByName, или напишите какую ошибку он вам при таком раскладе выдает если в предыдущей итерации так и сделали, ну там строка с addChild как я понял вам не нужна, так что ее удалите. вот вам целых 2 способа попробовать заставить работать то что написали вы.
далее:
начнем с того что решительно не пользуемся вложенными функциями, я еще понимаю в АС2 где с областью видимости были проблемы, да и то делегат же был.
почитайте про ООП и попробуйте написать на классах для начала что-нибудь попроще.

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

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

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


 


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


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