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

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

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

Регистрация: Aug 2012
Сообщений: 10
Post Объясните дурному сишнику работу с Display Object

Меня интересуют некоторые моменты синтаксиса actionscript 3.0 или особенности компиляции adobe flash cs4
1) Пробемма в динамическом выводе на экран объектов, класса-наследника MoviClip. Собственно есть символ S1, имеющий связь с соответствующим классом. Что если я хочу вывести несколько таких объектов на экран, допустим при помощи массива. Собсно код
Код AS3:
import S1;
var s:S1=new S1();
var a:Array=new Array();
var i:int;
 
for(i=0;i<3;i++)
{
   a[i]=s;
   addChild(a[i]);
   a[i].y=i*100;
}
так вот: у всех элементов массива атрибут у одинаковый. Т.е. оно лепит 3 символа на одно место.
могу описать действия далее
- в цикле задавал s.y перед a[i]=s
- добавлял символы с помощью а.push(s)
- заводил дополнительную переменную, которой присваивалась координата у
- в ручную сделал a[0].y=0; a[1].y=100; a[2].y=200
- компилировал код во flash и air
всё равно все символы имели атрибут у как у последнего символа
2) можно ли вызвать addChild из ф-ции as3-класса? Если можно -приведите пожалуйста код
3) как из класса соответствующего символу влиять на то, что творится на таймлайне данного символа. Опять же просьба привести код.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
var s:S1=new S1();
Вы создали один экземпляр класса S1.
Цитата:
for(i=0;i<3;i++)
{
a[i]=s;
addChild(a[i]);
a[i].y=i*100;
}
Вы создали массив с тремя ссылками на этот экземпляр. То есть а[0], a[1] и a[2] указывают на один единственный объект. В си не так?)))))))))
Как надо было:
Код AS3:
for(i=0;i<3;i++)
{
   a[i]=new S1(); // в цикле создаем столько объектов, сколько нужно.
   addChild(a[i]);
   a[i].y=i*100;
}
__________________
Reality.getBounds(this);

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
В си не так?)))))))))
Прочитал первый пост, и тоже хотел это спросить )
По-моему тут разница только в способе отрисовки дисплей объекта на экран. А создается все аналогично

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
DisplayObject добавляется в display list. И затем этот display list рендерится. Один и тот же DisplayObject может встречаться в этом списке только один раз. Отрендерить его несколько раз (в рамках такого списка отображения), как иногда делается в си - нельзя.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 31.08.2012 в 12:52.
Старый 31.08.2012, 12:44
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 5  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Цитата:
Отрендерить его несколько раз (в рамках этого списка отображения)
Его в принципе можно отрендерить только в одном месте. Даже если списков отображения у вас несколько(у эйра например на каждом окне свой) всё равно один DisplayObject может лежать только в одном родителе и только один раз. Егшо можно перекладывать, но тогда со старого места он пропадёт.
__________________
:)

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Я про то, что его можно отрендерить в bitmapData несколько раз. Или написать ещё свой рендер какой-то.
Но в рамках стандартного, с addChild/removeChild и пр. - только один.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Цитата:
В си не так?)))))))))
В си не так. Например:
Код:
// Оператор new возвращает указатель на созданный объект
SomeClass * firstVar = new SomeClass();
// В данном случае для инициализации secondVar вызывается
// конструктор копирования. В результате получаем копию объекта.
SomeClass secondVar = *firstVar;
// А вот если написать так, то мы скопируем только указатель на объект,
// но не сам объект:
SomeClass * thirdVar = firstVar;

// Если бы у нас был какой-нибудь литерал для создания объектов,
// скажем как у класса string, тогда дело выглядит так.
string firstString = "Hello, World";
// И в этом случае опять же вызывается конструктор копирования.
string secondString = firstString;

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
В си не так. Например:
Хм.. и что в си не так?
Код:
SomeClass secondVar = *firstVar;
Ну так здесь оператор копирования. У автора в коде нет никакого оператора копирования.
Цитата:
a[i]=s;
То есть как раз
Цитата:
// А вот если написать так, то мы скопируем только указатель на объект,
// но не сам объект:
SomeClass * thirdVar = firstVar;
Все точно так же.
Со стрингом как простым типом так же не вижу никаких различий.
__________________
Reality.getBounds(this);

Старый 31.08.2012, 14:20
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 9  
Ответить с цитированием
Frost47rus

Регистрация: May 2012
Сообщений: 131
1) если требовалось создать в цикле несколько экземпляров одного и того же класса и запихать их в массив, то вот:
Код AS3:
var myArray:Array = new Array();
for (var i:int = 0; i < 3; i++){
 var item:S1 = new S1();
 item.y = i*100;
 myArray.push(item);
 addChild(item); //или в любом другом месте (в соответствие с видимостью) - addChild(myArray[new int]);
}
2) не понял вопроса
3) если в классе есть публичные методы, влияющие на поведение экземпляра - конечно же, можно.

Старый 31.08.2012, 14:43
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 10  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
2) можно ли вызвать addChild из ф-ции as3-класса? Если можно -приведите пожалуйста код
Можно, если этот класс наследник DisplayObjectContainer

Код AS3:
package {
    public class SomeClass extends Sprite { // Sprite - наследник DisplayObjectContainer'а, значит у него есть метод addChild и он может содержать в себе дисплей объекты
          public function SomeClass() {
                   addSomeStuff();
          }
          private function addSomeStuff():void {
                 for (var i:int = 0; i < 10; i++) {
                         addChild(new SomeDisplayObject());
                 }
          }
    } 
}

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

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

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


 


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


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