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

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

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

Регистрация: Jul 2009
Сообщений: 4
По умолчанию Аттачинг множества мувиков из библиотеки.

1. Ребят помогите с AS3, все-таки решил его изучить...
Как в цикле аттачить мувики из библиотеки?
допустим в библиотеки есть клипы: slide1, slide2, slide3
Неужели все их нужно отдельно объявлять?

Допустим в AS2 можно было типа такого:
Код AS3:
for (i=0; i<3; i++) {
	this.attachMovie("slide"+i, "slide1_mc"+i, this.getNextHighestDepth());
	this["this.slide"+i+"_mc.x"]=i*10; // к примеру просто, нужно распределить мувики по горизонтали с шагом 10
}
Нужно для прокрутки и автоматического обновления контейнеров этим слайдами...


Последний раз редактировалось iNils; 10.12.2010 в 03:28.
Старый 10.12.2010, 03:35
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
В AS3 клипы создаются классами (классы пишутся с большой буквы)
Код AS3:
var slide1:Slide1 = new Slide1 ();
slide1.x = 0;
addChild (slide1);
var slide2:Slide1 = new Slide2 ();
slide2.x = 10;
addChild (slide2);
var slide3:Slide1 = new Slide3 ();
slide3.x = 20;
addChild (slide3);
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 10.12.2010, 03:36
medvedya2 вне форума Посмотреть профиль Отправить личное сообщение для medvedya2 Найти все сообщения от medvedya2
  № 3  
Ответить с цитированием
medvedya2
[+1 09.03.11]

Регистрация: Mar 2010
Сообщений: 128
а что за метод attachMovie? в as3 такого вроде нет.
если их вам надо просто показать на экране, то проще:
поместите мувики в другой мувик так чтоб на каждом кадре был отдельный мувик.
этому мувику задайте привязку к классу.
Код AS3:
for (i=0; i<3; i++) 
{
 var mc:MyMovies new MyMovies(); 
 mc.gotoAndStop(i+1);
 mc.x=i*10;
 this.addChild(mc); 
}
или
var mc:MyMovies new MyMovies(); 
for (i=0; i<3; i++) 
{
 mc.gotoAndStop(i+1);
 var inMc:MovieClip=mc.getChildAt(0);
 inMc.x=i*10;
 this.addChild(inMc); 
}

Старый 10.12.2010, 04:55
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 4  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Код AS3:
import flash.display.Sprite;
 
var XPos:int=0;
var MCsXOffset:Number=3; // расстояние между мувиклипами
var myMCsHolder:Sprite=new Sprite();
addChild(myMCsHolder);
 
for(var i:int=0;i<10000000;i++){
	var newLibraryItem:myLibraryMC=new myLibraryMC(); // класс вашего мувика
	myMCsHolder.addChild(newLibraryItem);
	newLibraryItem.x=XPos;
	XPos+=newLibraryItem.width+MCsXOffset;
}

Старый 10.12.2010, 08:41
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 5  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
а что за метод attachMovie? в as3 такого вроде нет.
Зато есть в as1/2. Там можно было не задавать класс клипу, дать ему идентификационное уникальное имя, затем выдергивать клип из библиотеки по нему. До перехода на ас3 мне это казалось удобным. Сейчас меня коробит от синтаксиса:
Код AS1/AS2:
var mc:MovieClip = attachMovie("myMovieClip", "myMovieClip", getNextHidhestDepth());
Цитата:
если их вам надо просто показать на экране, то проще:
поместите мувики в другой мувик так чтоб на каждом кадре был отдельный мувик.
Это не проще, это неправильно, некрасиво, нерационально. А в данном случае просто недопустимо.
__________________
тут я

Старый 10.12.2010, 08:51
sniper007 вне форума Посмотреть профиль Отправить личное сообщение для sniper007 Найти все сообщения от sniper007
  № 6  
Ответить с цитированием
sniper007

Регистрация: Jun 2010
Сообщений: 30
Цитата:
Сообщение от КорДум Посмотреть сообщение
Это не проще, это неправильно, некрасиво, нерационально. А в данном случае просто недопустимо.
В таком случае не подскажите как это сделать красиво и правильно?

Старый 10.12.2010, 09:39
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 7  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
private var arrMC:Array = [Clip1, Clip2, ..., ClipN];
...
for(var i:uint = 0; i < arrMC.length; i++) {
	var mc:MovieClip = new (arrMC as MovieClip)();
	mc.x = i * 20;
	addChild(mc);
}
Писал с коммуникатора на коленке. Как-то так. Class1..N - классы клипов.
__________________
тут я


Последний раз редактировалось КорДум; 10.12.2010 в 09:41.
Старый 10.12.2010, 09:47
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 8  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
КорДум,
Код AS3:
...
var mc:MovieClip = new arrMC[i]();
...
Ну и есть ещё вариант с getDefinitionByName (тоже не компилил)
Код AS3:
for(var i:uint = 0; i < N; i++) {
        var mcClass:Class = getDefinitionByName("Clip"+i);
	var mc:MovieClip = new mcClass();
	mc.x = i * 20;
	addChild(mc);
}
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 10.12.2010, 09:52
aldanstar вне форума Посмотреть профиль Отправить личное сообщение для aldanstar Найти все сообщения от aldanstar
  № 9  
Ответить с цитированием
aldanstar

Регистрация: Jul 2009
Сообщений: 4
Ребята, спасибо... Это все конечно хорошо.

1. Мне было бы в массиве желательно указывать число, а не явно записывать каждый мувик.
типа: private var arrMC:Array = [6] // 6 мувиков, ведь количество может меняться
2. Каждый мувик является в библиотеке отдельным классом - объектом displayObject со своим наполнением, со своим заданным именем класса

Может можно создать класс аттачинга, где бы при обращении к функции задавались количество мувиком и имя типа "slide"+1

Добавлено через 4 минуты

Код AS3:
for(var i:uint = 0; i < N; i++) {
        var mcClass:Class = getDefinitionByName("Clip"+i);
	var mc:MovieClip = new mcClass();
	mc.x = i * 20;
	addChild(mc);
}
E:\My Documents\main.as, строка 40 1118: Неявное исправление значения статического типа Object на возможный несвязанный тип Class.

Добавлено через 10 минут
Код AS3:
private var arrMC:Array = [Clip1, Clip2, ..., ClipN];
...
for(var i:uint = 0; i < arrMC.length; i++) {
	var mc:MovieClip = new (arrMC as MovieClip)();
	mc.x = i * 20;
	addChild(mc);
}
TypeError: Error #1007: Попытка реализации в объекте, который не является конструктором.
at main()

Добавлено через 23 минуты
Ребята, попробовал так и получилось:
Код AS3:
			for (var i:uint = 1; i < 3; i++)
			{
				var Mk:Class = getDefinitionByName("Clip" + i)as Class;
				var mc:MovieClip = new Mk();
				mc.x = i * 20;
				this.addChild(mc);
			}
Но теперь мне нужно эти слайды загонять в заранее аттаченные MC (назвал SlideBox)... их ровно 6. Нужно для обновления этих самых SlideBox, при количестве слайдов > 6. Например из первого SlideBox удалять наследников (Slide1) и аттачить Slide7.

Добавлено через 32 минуты
Контейнеры (SlideBox) для слайдов (Slide1, Slide2,... SlideN) подгрузил так:
Код AS3:
			for (var i:uint = 0; i < 6; i++)
			{
				var SlideBox:Class = getDefinitionByName("SlideBox")as Class;
				var slideBox:MovieClip = new SlideBox();
				slideBox.rotation = 60*i;
				frame1.addChild(slideBox);
				trace(slideBox.name);
			}
Теперь нужно запихнуть туда слайды.

Добавлено через 46 минут
Надеюсь, с Вашей помощью, я уже сегодня выложу результат (исходник) сюда...

Добавлено через 56 минут
Нужно как то подправить выше приведенный код так, чтобы каждый slideBox имел свое уникальное значение, типа такого slideBox1, slideBox2 и т.д. Может массив имен создавать... Не знаю... Помогите.


Последний раз редактировалось aldanstar; 10.12.2010 в 09:58.
Старый 10.12.2010, 10:54
sniper007 вне форума Посмотреть профиль Отправить личное сообщение для sniper007 Найти все сообщения от sniper007
  № 10  
Ответить с цитированием
sniper007

Регистрация: Jun 2010
Сообщений: 30
что то у меня не получается... в библиотеке создан мувик с именем "pic1", связан с "pictures.pic1.as".
Пишет "Error #1065: Переменная pic1 не определена."

Код AS3:
var str:String = "pic1";
var Mk:Class = getDefinitionByName(str) as Class;
new_pic = new Mk();

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

Теги
AS3 , Аттачинг , мувики из библиотеки

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

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


 


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


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