PDA

Просмотр полной версии : Генерация событий, копирование объекта, самодостаточный объект, конфиги.


cccr85
02.05.2010, 09:58
1. События генерируемые мной.

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

2. Копирование объекта.

У меня есть несколько слоев родителей, в этих слоях содержаться слои дети. Причем 1 слой(ребенок), повторяется во всех слоях родителях. Как я понял, мне нужно просто создать один раз этот слой, который повторяется во всех слоях, и поместить его во все слои родители, простым addChild. Этого будет достаточно? Мне нужно чтобы при изменении повторяющегося слоя, он изменялся на всех слоях родителях.

3. Объект сам управляет своим положением на слое родителе.

Наверное это простой вопрос, но я сколько не пробовал, у меня ничего не выходило. В общем хочется чтобы я создал объект слоя ( var lala:Sprite = new mySprite() ), добавил его на сцену (addChild(lala)) и он бы сам себе задал ширину, высоту, координаты x и y. Такое возможно? Я пробовал сделать так, в конструкторе объекта писал: this.x = 10; this.height = 100; но ничего не получалось.

4. Конфиги.

Настройки лучше хранить в xml, так как настройки статические, смысла подгружать их каждый раз заново в swf нету, лучше бы подгрузить их при генерации swf один раз. Такое возможно? И пожалуйста подскажите может есть более хороший вариант?

5. Слишком большой размер окна плеера.

В общем в свойствах fla я указал размер, например 500 на 500. При тестировании (ctrl + enter) окно плеера получается больше указанных размеров, и объекты расположены за пределами видимого экрана. Мне приходиться в контекстном меню выбирать "показать все" и только тогда я вижу свои объекты на сцене. Можно ли как нибудь жестко задать размер окна плеера?

Большое всем спасибо, за попытку, или не попытку ответить на мои вопросы.

etc
02.05.2010, 13:16
1. Если таковой наследуется от EventDispatcher или использует интерфейс IEventDispatcher с композицией на экземпляр EventDispatcher. Простейшие примеры вы можете увидеть в том же адобовском хелпе, плюс многочисленные темы на форуме по поводу передачи данных;

2. В AS3 нет понятия слоев, конкретизируйте, что вы подразумеваете под этим понятием;

3. Ширину пустому спрайту задать нельзя. Всё остальное должно было получиться;

4. Это зависит от того, будут ли изменения этого самого конфига когда-либо;

5. Странное поведение, окно должно быть 500x500, либо вы перемудрили с scaleMode.

cccr85
02.05.2010, 13:35
[QUOTE=etc;905406]
QUOTE]

Слой = спрайт, мувиклип вобшем любой контейнер
Данные из конфига будут только читаться, никаких изменений.
Я указал в настройках flv ширину 750, и высоту 800. Мне именно такая swf нужна. СкалеМоде не выставлял.

mikhailk
02.05.2010, 15:00
Не хочу быть занудой, но понятие слоев все-таки есть :)
Достаточно взглянуть на таймлайн. Там слева так и написано: Layer1, Layer2...

cccr85, я думаю, размеры у Вас улетели, поскольку флэшка была открыта "отдельностоящим" флешплеером или как-то так. В параметрах публикации выберите публикацию в html и увидите свою флешку в правильном размере.

etc
02.05.2010, 15:11
Не хочу быть занудой, но понятие слоев все-таки есть :)
Достаточно взглянуть на таймлайн. Там слева так и написано: Layer1, Layer2...
Не хочу быть занудой, но читать нужно внимательно.

cccr85
02.05.2010, 18:52
Привет еще раз, меня все еще волнуют следующие вопросы,

1. как лучше всего организовать конфиг.

2. И по поводу "слоев", объясню получше. Я создаю один объект A унаследованный от Sprite. Наполняю его данными. После этого создаю 10 обьектов B унаследованный от Sprite. и добавляю к ним A. То есть B1.addChild(A); ... B10.addChild(A); Если теперь изменить объект A, он измениться во всех спрайтах родителях? И в обще можно так делать?

Diestro
02.05.2010, 18:57
То есть B1.addChild(A); ... B10.addChild(A); Если теперь изменить объект A, он измениться во всех спрайтах родителях? И в обще можно так делать?
Нет, он будет добавлен только к B10. У "объекта" A может быть только один родитель.

cccr85
02.05.2010, 18:59
Если организовать конфиг статичным классом, как думаете будет нормально?

Добавлено через 2 минуты
Нет, он будет добавлен только к B10. У "объекта" A может быть только один родитель.

Тогда как лучше поступить? Объект A полностью совпадает на всех спрайтах в которые он будет добавлен. И при изменении объекта A он должен везде изменяться. Если сделать его статичным, это поможет?

Diestro
02.05.2010, 19:07
Небольшая каша...
Класс А - это класс, от которого можно создавать экземпляры. Сколько вам нужно добавить их на экран, столько экземпляров класса А и нужно создать: new A();
Если есть какое-то свойство, которое должно быть одинаковое для всех экземпляров - да нужно использовать статические свойства. Собственно для этого их и придумали.

Добавлено через 16 минут
Если организовать конфиг статичным классом, как думаете будет нормально?
Нормально.

cccr85
02.05.2010, 19:26
А если в классе A все свойства и методы одинаковые?

Diestro
02.05.2010, 19:42
А если в классе A все свойства и методы одинаковые?
Такого не может быть если класс А наследуется от Sprite или MovieClip. В любом случае будет большое количество уникальных, не статических свойств, для разных экземпляров. Если в вашем классе, например, рисуется квадрат через свойство graphics, то это свойтво будет уникально для все экземпляров классов. У каждого экземпляра свой graphics, свой parent, свое свойство х, у и т.д.. Практически все свойства которые унаследуют ваш класс от Sprite будут не статическими.

cccr85
02.05.2010, 19:50
Ок. Тогда я опишу че хочу, может быть тогда Вы меня поймете.

Мне нужно сделать книгу. Каждый разворот, это Спрайт. Так вот, на каждой странице, справа(каждый разворот, делим на две страницы), есть одинаковый спрайт, в котором выводятся одинаковые данные, в котором эти данные могут изменяться на остальных страницах. И при изменении этого спрайта, он автоматически должен измениться на всех страницах.

Добавлено через 2 минуты
Как я понимаю, я хотел изменять так:

var unchangeable:Sprite = new MySprite();
unchangeable.setData(Data);

И все, на всех страницах он изменен.

Но я подумал сейчас, и скорее всего можно создать 10 спрайтов таких, и в каждом ловить события, которые приводят к изменению данных.

Diestro
02.05.2010, 22:18
Можно ловить события, но это нужно делать централизовано... Слушать события где? На stage? Я бы так не делал.
Можно где то хранить массив спрайтов и по событию в массиве циклом делать setData(Data)

Добавлено через 56 минут
А вообще если в вашей книге будет 100 страниц вы будете показывать 100 спрайтов одновременно на экране? Сколько одинаковых спрайтов может быть одновременно на экране?

cccr85
03.05.2010, 00:31
В книге всего 6 разворотов. На разворотах содержится фон, кнопки, текст, картинки.

Добавлено через 14 минут
Я в обще хочу сделать так.

Класс main.run устанавливает глобальные настройки сцены, и запускает объект книга и объект меню и добавляет их на сцену.
При инициализации объект книга, создает все страницы, основываясь на данных из класса конфиг. Сохраняет их к себе. Выкладывает их стопкой, и слушает события с помощью которых можно переворачивать страницы.
Объект меню создает кнопки, и вешает на них события, при срабатывании которого, он меняет вид двух кнопок, и отправляет событие изменить страницу объекту книга.
Для страниц есть общий класс, и есть классы которые его наследуют. Пока я выделили только два класса наследника. Левая и правая страница разворота.

Есть еще классы, из которых состоят страницы. Которые в свою очередь состоят из других классов.

Добавлено через 16 минут
Методы которые реализуют анимацию переворачивания книги, реализованы в классе книга.

saikspaik
03.05.2010, 05:20
Может static будет полезен?

cccr85
03.05.2010, 05:23
Может static будет полезен?

Всмысле?

Diestro
03.05.2010, 11:04
В книге всего 6 разворотов. На разворотах содержится фон, кнопки, текст, картинки.
Не понятно что будет присутствовать на каждой странице и должно меняться одновременно?

cccr85
03.05.2010, 15:21
На каждой правой странице, есть спрайт, он одинаковый для всех страниц. Вид этого спрайта можно поменять на каждой странице. То есть например на первом развороте поменяли этот спрайт, и он должен поменяться на всех разворотах.

Diestro
04.05.2010, 11:51
Я так и не получил ответ на вопрос:
Сколько одинаковых спрайтов может быть одновременно на экране?
Если из 100 спрайтов на экране будет виден только 1 всегда, может не имеет смысла рисовать 100?

saikspaik
05.05.2010, 02:55
Вот что я имел ввиду.
24361