PDA

Просмотр полной версии : динамическое создание объектов


Riin
27.12.2006, 15:56
никак не моку додуматься, почему вот ЭТО не работает...
var snow:Number = 15;
for (x = 0; x < snow; x++) {
_root.attachMovie("snow","snow" + x, x), {
_x:Math.random()*150,
_y:Math.random()*100,
_rotation:Math.random()*360
}
};

CCCPirate
27.12.2006, 16:24
никак не моку додуматься, почему вот ЭТО не работает...
var snow:Number = 15;
for (x = 0; x < snow; x++) {
_root.attachMovie("snow","snow" + x, x !!!!вот это-), {
_x:Math.random()*150,
_y:Math.random()*100,
_rotation:Math.random()*360
}-надо сюда!!!!
};

:bye:

Riin
27.12.2006, 16:36
мне видимо соображалка отказывает сегодня... что именно "вот это"?? это то, что в скобочках или чего другое...

CorC
27.12.2006, 16:46
скобки ) и } поменяй после "вот это-" и в самом конце

Riin
27.12.2006, 16:54
эмм... спасибо... ошибок код не выдает...

но все равно не рабтает...

CorC
27.12.2006, 17:01
var snow:Number = 15;
for (x = 0; x < snow; x++) {
_root.attachMovie("snow","snow" + x, x, {
_x:Math.random()*150,
_y:Math.random()*100,
_rotation:Math.random()*360
});
};

CCCPirate
27.12.2006, 17:02
короче просто сделай так:

var snow:Number = 15;
for (x=0; x<snow; x++) {
_root.attachMovie("snow", "snow"+x, x, {_x:Math.random()*150, _y:Math.random()*100, _rotation:Math.random()*360});
}

может ты линки в библиотеке не проставил?

Leezard
02.01.2007, 15:29
_x:Math.random()*150,
_y:Math.random()*100,
_rotation:Math.random()*360
_x ,_y, _rotation чего? Какого объекта? ["snow"+x] ? А где это видно из кода?

etc
02.01.2007, 15:37
Leezard, ты о чем? :D

Leezard
02.01.2007, 15:59
Я об этом:
var snow:Number = 15;
for (x = 0; x < snow; x++) {
_root.attachMovie("snow","snow" + x, x), {
_x:Math.random()*150,
_y:Math.random()*100,
_rotation:Math.random()*360
}
};
Создаем 15 объектов которые помещаются в X:0 Y:0, потому что
_x:Math.random()*150,
_y:Math.random()*100,
_rotation:Math.random()*360
Относиться непонятно к чему.

__etc а ты о чем?

Leezard
02.01.2007, 16:04
Ой , с бодуна фигурные скобки не заметил :wacko:
Всех с наступившим :yahoo:
P.S. Хотя они все равно не там стоят, так что все равно не понятно к чему относятся параметры :) , всегда делал
_root["snow" + x]. _x=Math.random()*150;
...

etc
02.01.2007, 16:10
Leezard, лучше так не делай :)
attachMovie возвращает ссылку на созданный клип, зачем извращаться с квадратными скобками, я не понимаю…

Leezard
02.01.2007, 16:16
Ну наверное затем, что данное обращение используется везде и в функции создания объектов и затем в функциях управления этими объектами, из любого места всегда и везде. Просто как бы проще всегда применять однотипную структуру. А чем плохо?
Кроме того если , в дальнейшем буду управлять этим снегом, не используя твины (ну вдруг), я просто скопирую написанное:
_root["snow" + x]. _x=Math.random()*150;
...

и задам приращения:
_root["snow" + x]. _x+=... ;
...

А когда придет время растаться со снегом, опять скопирую:
_root["snow" + x].removeMovieClip();
И таким образом сэкономлю немного времени.

etc
02.01.2007, 16:31
Ты меня не понял, я об этом:
var mc = _root.attachMovie(…
mc._x = …
Зачем этот изврат с _root["snow"+x]?

Leezard
02.01.2007, 16:55
А, ну так это суть одно и тоже :)
Я имею ввиду что чаще удобней задание параметров "выносить за скобки " создания объекта. Мне по крайней мере. Но опять же если я активно, буду управлять созданным динамичным объектом, который к тому же является частью двумерной конструкции, я пишу со скобками. Например при создании локации в игре, все находится в мувике контейнере создавая его использую ссылку:
var mc = _root.attachMovie(…
mc._x = … Оперирование огромным количество параметров и функций контейнера значительно упрощается, но...
Когда мы начинаем в контейнере создавать тайлы, запись типа:
_root.mc["tile" +x+"_"+y]. _x=...
Значительно улучшает понятийность происходящего, тем более если в одном цикле или функции нам необходимо еще совершать какие-то действия или менять параметры соседних тайлов (объектов):
_root.mc["tile" +x+"_"+y]. _alpha=100;
_root.mc["tile" +(x-1)+"_"+(y+1)]. _alpha=75;
_root.mc["tile" +(x)+"_"+(y+1)]. _alpha=75;
_root.mc["tile" +(x+1)+"_"+(y+1)]. _alpha=75;
...
В ЭТОМ гораздо сложнее запутаться :)

iNils
02.01.2007, 17:05
_root.mc["tile" +x+"_"+y]. _alpha=100;
_root.mc["tile" +(x-1)+"_"+(y+1)]. _alpha=75;
_root.mc["tile" +(x)+"_"+(y+1)]. _alpha=75;
_root.mc["tile" +(x+1)+"_"+(y+1)]. _alpha=75;
...
В ЭТОМ гораздо сложнее запутаться :)
Я запутался сразу же... В таких случаях имена лучше хранить в массивах.

Leezard
02.01.2007, 17:21
Я запутался сразу же... В таких случаях имена лучше хранить в массивах.
Ну а тогда какая разница? Массив - те же квадратные скобки :)
Да и зачем? Хранить ИМЯ в массиве. Имя формируется местоположением объекта (тайла в данном случае)
Когда мне надо обработать тайл 10 10, не думая набираю:
_root.mc["tile" +10+"_"+10].
Иил например при обработке в циклах или функциях:
function func(x,y){
// Искомый тайл
_root.mc["tile" +x+"_"+y]._alpha=100
// Тайлы по кресту (изометрия)
_root.mc["tile" +(x-1)+"_"+(y)]._alpha=100
_root.mc["tile" +(x+1)+"_"+(y)]._alpha=100
_root.mc["tile" +(x)+"_"+(y-1)]._alpha=100
_root.mc["tile" +(x)+"_"+(y+1)]._alpha=100
// Тайлы по диагоналям (изометрия)
_root.mc["tile" +(x-1)+"_"+(y-1)]._alpha=100
_root.mc["tile" +(x-1)+"_"+(y+1)]._alpha=100
_root.mc["tile" +(x+1)+"_"+(y-1)]._alpha=100
_root.mc["tile" +(x+1)+"_"+(y+1)]._alpha=100

}
P.S.
В масивах храняться надстройки над тайлами - объекты, стены и прочее.

iNils
02.01.2007, 17:29
Leezard, вы говорите не понимая о чем. Ваш подход это вчерашний день, про использование в коде _root я вообще молчу.

Leezard
02.01.2007, 17:41
Leezard, вы говорите не понимая о чем. Ваш подход это вчерашний день, про использование в коде _root я вообще молчу.

iNils, использование в коде _root - это пример, не имеющий к теме никакого отношения. Вытек он из поста __etc var mc = _root.attachMovie(… :Остальная часть вашей фразы - очень аргументирована. :taunt:
Речь идет о методах задания параметров объектам. Я объяснял __etc, почему я использую квадратные скобки, приведя более или менее конкретный пример, когда это удобно. Поясните что вы считаете днем сегодняшним. Если вы уверены что в данном случае (построение изометрических тайлов) метод mc[] является не оптимальным, неверным или полным анахронизмом, а вы дали это понять, укажите КАК НАДО.

etc
02.01.2007, 18:37
Квадратные скобки неудобны никогда. Их количество не должно превышать одной штуки на подобный блок кода.

Nirth
02.01.2007, 18:46
Leezard вы усложняете себе жизнь, ссылками намного легче работать, их намного легче проверять и при желании их можно назвать как надо а не "tile" +(x-1)+"_"+(y).

iNils и __etc пытаются вам объяснить это, а вы уперлись и отказываетесь понимать, если вы ждете от них что они разжуют и плюнут перевареную пищу вам в рот, то недождетесь =) поищите по форуму, зайдите на flash-ripper.com и посмотрите что пишут люди которые с флэшом уже даже не с пятой а 4-3 версии.

Leezard
02.01.2007, 20:40
Квадратные скобки неудобны никогда. Их количество не должно превышать одной штуки на подобный блок кода.
Ну допустим, принимаю как аксиому. Теперь осталось только сказать почему. Тогда, возвращаясь к примеру, как реализовать функцию изменяющую, например, альфу у блока объектов находящихся в муве контейнере "mc" ? Опять же для примера - искомому 100% остальным - 75.
Я написал ее так (простим мне ламеру использование _root всуе):
function func(x,y){
// Искомый тайл
_root.mc["tile" +x+"_"+y]._alpha=100 ;
// Тайлы по кресту (изометрия)
_root.mc["tile" +(x-1)+"_"+(y)]._alpha=75;
_root.mc["tile" +(x+1)+"_"+(y)]._alpha=75;
_root.mc["tile" +(x)+"_"+(y-1)]._alpha=75;
_root.mc["tile" +(x)+"_"+(y+1)]._alpha=75;
// Тайлы по диагоналям (изометрия)
_root.mc["tile" +(x-1)+"_"+(y-1)]._alpha=75;
_root.mc["tile" +(x-1)+"_"+(y+1)]._alpha=75;
_root.mc["tile" +(x+1)+"_"+(y-1)]._alpha=75;
_root.mc["tile" +(x+1)+"_"+(y+1)]._alpha=75;

}
А как надо было?

Leezard вы усложняете себе жизнь, ссылками намного легче работать, их намного легче проверять и при желании их можно назвать как надо а не "tile" +(x-1)+"_"+(y).

iNils и __etc пытаются вам объяснить это, а вы уперлись и отказываетесь понимать, если вы ждете от них что они разжуют и плюнут перевареную пищу вам в рот, то недождетесь =) поищите по форуму, зайдите на flash-ripper.com и посмотрите что пишут люди которые с флэшом уже даже не с пятой а 4-3 версии.
Я не упираюсь ни в коем случае, мало того, я абсолютно согласен, что ссылками работать очень удобно, мало того я с ними работаю, кроме того практически всегда ;)
Но, я привожу пример конструкции, где по моему личному, абсолютно не проффесиональному, мнению, использования [], весьма удобно. И в ответ, вместо конкретики или хотя бы объяснения в двух словах (не оптимально по скорости, приводит к багам...) получаю фразы типа:
Leezard, вы говорите не понимая о чем. Ваш подход это вчерашний день...
Квадратные скобки неудобны никогда. Их количество не должно превышать одной штуки на подобный блок кода.
Leezard вы усложняете себе жизнь
Честное слово, я не хочу спорить, я просто не понимаю, почему "никогда", "вчерашний день", "не более одной штуки".
Есть конкретный, очень короткий (см.функцию выше) пример. Покажите как это можно сделать короче, быстрей и понятней.
Поскольку я хочу писать код в стиле завтрашнего дня, на AS2 вчерашнего, я попробую разжевать для себя сам, поправьте меня...
Создаем объекты с именами "tile1","tile2",..."tile900" для локации (карты)
30х30.
Типа так:
---Создаем---
var counter=1;
var names=[];
for(var i=1;i<=30;i++){
names[i]=[];
for(var j=1;j<=30;j++){
counter++;
//[] - зло, но как создать "собранный" линк? set? eval?
set("tile"+counter,mc.attachMovie("tiles","anyname"+counter,someDepth,{x:i,y:j}))
//согласно совету iNils воодим масив для хранения имен, а по сути соответствий координаты - мувики.
names[i][j]="tile"+counter;
}
}


Если писать неправильно то имеем следующее:
for(var i=1;i<=30;i++){
for(var j=1;j<=30;j++){
mc.attachMovie("tiles","tile"+i+"_"+j,someDepth,{x:i,y:j}))
}
}

---Обращение к блокам тайлов---

function func(x,y){
// Как найти искомый тайл?
//по умному тут у нас должно быть что-то вида ссылка._alpha=100
//и мы даже знаем как эта ссылка обзывается - name[x][y]
// но что делать дальше, я честно говоря не знаю
// я могу записать в виде _root[name[x][y]].alpha=100
// но это опять те же квадратные скобки, мало того еще и с упоминанием рута.
}

Вопросы которые меня терзают прямо сейчас:
Какие еще методы обращения к свойствам объектов существуют?
Каким образом я могу реализовать ссылка._alpha=100 без квдратных скобок, где ссылка - сложносочиненный стринг.
Зачем превращать квадратное, в длинное, для того чтобы затем сделать опять квадратным?

iNils
02.01.2007, 20:43
_root[name[x][y]].alpha=100
О боже...

Leezard
02.01.2007, 20:49
_root[name[x][y]].alpha=100
О боже...
Очень конструктивно, а еще что нибудь?

etc
02.01.2007, 21:24
Проще использовать ссылки и связать каждый тайл с другим. tile_mc.leftUpTile, tile_mc.leftBottomTile, …
Тебе же говорят — нужно использовать ссылки, а не обращаться по имени напрямую.
В идеале вообще написать базовый класс Tile с предусмотренными ссылками на восемь соседних клеток. И никакого геморроя не будет. Обратился к искомому тайлу по имени (одни единственные скобки), а ко всем остальным по ссылкам.
Это облегчает читабельность кода просто многократно. Более того, в твоем подходе будут ошибки у крайних тайлов, а в случае ссылок можно просто поставить проверку на null. А если пытаться обратиться напрямую, то будет плохо.

iNils
02.01.2007, 21:33
Пример класса. Белым выделенно то, о чем мы с __etc так долго твердили. Плюс я усложнил модель выбора нужного тайла. Выбираем 100% не прозрачен, его окружают с 75%, а следующие кольцо с 50%.
class MultiTile extends MovieClip {
private var __tile:Array = null;

function MultiTile () {
__tile = new Array ();
}

function addTile (x:Number, y:Number):Void {
if (!__tile[x]) {
__tile[x] = new Array ();
}
__tile[x][y] = attachMovie ("tile", "", this.getNextHighestDepth (), {_x:x * 20, _y:y * 20});
}

function getTile (x:Number, y:Number):Void {
for (var i:Number = x - 2; i < x + 3; i++) {
for (var j:Number = y - 2; j < y + 3; j++) {
var mc:MovieClip = __tile[i][j];
if (mc) {
if (i == x && j == y) {
mc._alpha = 100;
} else if (Math.abs (x - i) < 2 && Math.abs (y - j) < 2) {
mc._alpha = 75;
} else {
mc._alpha = 50;
}
}
}
}
}

}

Пример использования.
for (var i:Number = 0; i < 10; i++) {
for (var j:Number = 0; j < 10; j++) {
mt.addTile (i, j);
}
}
mt.getTile (5,4)

etc
02.01.2007, 21:35
iNils, хороший алгоритм :)
Со ссылками, правда, не будет вообще циклов в классе, но будет один большой с присвоением ссылок на соседей…

pkfun
02.01.2007, 21:56
А я попроще примерчик. :)

var mc:MovieClip = null;
var mc_links:Array = [];
//
for (i=0; i<10; i++) {
mc_links[i] = [];
for (j=0; j<10; j++) {
mc = this.attachMovie('mc', 'mc'+i+'.'+j, this.getNextHighestDepth());
mc._x = j*40+55;
mc._y = i*40+55;
mc_links[i][j] = mc;
//
mc.onPress = function():Void {
if (this._alpha<100) {
this._alpha = 100;
}
};
//
}
}
//
function alphaActionDiag():Void {
for (i=0; i<10; i++) {
for (j=0; j<10; j++) {
if (i == j) {
mc_links[i][j]._alpha = 10;
}
}
}
}
//
function alphaActionBackDiag():Void {
for (i=0; i<10; i++) {
for (j=0; j<10; j++) {
if (mc_links[i].length-i-1 == j) {
mc_links[i][j]._alpha = 10;
}
}
}
}
//
setTimeout(alphaActionDiag, 2000);
//
setTimeout(alphaActionBackDiag, 4000);

Рисуем диагонали.

Leezard
03.01.2007, 16:28
Во первых огромный респект за внимание и найденное время для написания кода. На самом деле многого стоит.
Во вторых записки деревенского казуала о сути диспута.
Существует два способа обращения к объекту , его методам и свойствам:
- Через ссылку;
- Непосредственно.
Что я собственно хотел услышать и не услышал, это обоснование применения первого и предание анафеме второго.
Давайте посмотрим что мы имеем в обоих случаях.
1. обращения к объекту через ссылку.
[+] имеем некоторый уровень абстрактности создаваемого кода. То есть создавая некоторую алгоритмическую последовательность будь-то функция или метод класса, абстрагируемся от конкретики и пишем универсальный код. И действительно, если нам нужно, к примеру, написать алгоритм взаимодействия некоторых объектов, все это записывается как в школьной задачке:
объект А имеет 50 процентов прозрачности от объекта Б
и глубину меньшую чем у объекта С.
Замечательно, все четко понятно и красиво.
[+] простота записи, как частный случай первого плюсика. И действительно, ну кому хочется писать
_root.qqq.www.eee.rrr.ttt.yyy.uuu.iii......_alpha=50;
_root.qqq.www.eee.rrr.ttt.yyy.uuu.iii......_x=150;
_root.qqq.www.eee.rrr.ttt.yyy.uuu.iii......_y=250;
_root.qqq.www.eee.rrr.ttt.yyy.uuu.iii......_rotation=180;
...
когда то же самое можно написать в виде
mc._alpha=50;
mc._x=150;
mc._y=250;
mc._rotation=180;
...
Мало того мы избавляемся от необходимости абсолютного указания объекта, мы используем относительную адресацию внутри функции, так же как мы используем относительное обращение при помощи this и _parent в методах объектов, и наш код становится более мобильным. Кроме того это приводит к возможности портирования наших решений в другие наши проекты, проекты наших коллег и к тому же бережет их психику. Им не прийдется вскакивать теперь среди ночи с криками О боже... в холодном поту.

[-] А что в минусах? Почти ничего. Существует правда необходимость дополнительных телодвижений для поддержки работоспособности наших методов и функций. Например в случае с построением карты из объектов - тайлов. Получаем дополнительный массив аналогичной размерности. При обращении к объекту, одна строчка при прямом обращении становится двумя при обращении через ссылку. Почему? Правильно в любом случае надо сначала назначить ссылку при "случайной" выборке объекта из подмножества, и только потом мы можем ее использовать. А в остальном. Все тоже самое, и работа с индексами тайлов, абсолютно таже самая, что в масиве, что при прямом обращении к объекту. Мало того никто не мешает выстроить поле тайлов построчно и тогда прямое обращение к объекту будет иметь вид
mc[i][j]._alpha=...
//где mc - мувик контейнер.
и в этом случае удобства вроде как особо и не видно, если только не помнить о правилах хорошего кода и возможности создания универсальных методов.

2. О [+]и[-] прямого обращения говорить не имеет смысла, достаточно инвертировать то что сказано выше. И добавить что это метод для эгоистов.

Так какие выводы делает деревенский казуал, писатель вчерашенго дня?
Если гламурные флэшеры говорят "о боже, фе какая гадость, больше одной штуки на функцию не использовать", в этом наверняка есть смысл! Но если при этом они не говорят почему, значит они полюбому это скрывают, чтобы ты не казался таким же умным как они. :p

Шучу. Вы парни достойные.

P.S. Друзья, давайте будем немного проще :bye:
То что я здесь нагородил, на самом деле умещается в две фразы, которые и стоило написать с самого начала. Всем ОГРОМНОЕ спасибо, заставили подумать ;) , переосмыслить.
iNils - тебе особый респект, не первый раз ты тратишь на меня свое время, да и не только на меня. Я бы так не смог. Не обижайся если что, я по доброму.
Еще раз огромное всем спасибо, всех с прошедшим новым годом и наступающим рождеством христовым. Всего самого лучшего, интересных проектов и незлых заказчиков. :drinks:

iNils
03.01.2007, 16:52
Все мое "о боже" не дает покоя? Я объясню.
Запись вида
_root[name[x][y]]говорит о том, что значение элемента массива имеет тип String, и вместо того, чтобы напрямую получить ссылку к объекту, мы опять привязываемся непонятно к чему.

При обращении к объекту, одна строчка при прямом обращении становится двумя при обращении через ссылку. Почему? Правильно в любом случае надо сначала назначить ссылку при "случайной" выборке объекта из подмножества, и только потом мы можем ее использовать.Это про то, что надо сделать:
var mc:MovieClip = _root.qqq.www.eee.rrr.ttt.yyy.uuu.iii;а потом только можно mc использовать?

Leezard
03.01.2007, 17:32
Все мое "о боже" не дает покоя? Я объясню.
Запись вида
_root[name[x][y]]говорит о том, что значение элемента массива имеет тип String, и вместо того, чтобы напрямую получить ссылку к объекту, мы опять привязываемся непонятно к чему.

А, то :D Все понятно, конечно все так, просто есть такой инструмент и он работает именно там где надо превратить стринг в имя.


Это про то, что надо сделать:
var mc:MovieClip = _root.qqq.www.eee.rrr.ttt.yyy.uuu.iii;а потом только можно mc использовать?
В этом куске я говорил про выборку линка, это пример с тайлами.
var mc:MovieClip = __tile[i][j];
вот тут вы задаете линк, с которым работаете далее. В случае с прямым обращением этого можно не делать.
А к чему этот вопрос?
Вы имеете ввиду запись в одну строку?
var mc:MovieClip =attachMovie(...
Но ведь в случае с полем тайлов мы так не делаем, потому что это и есть превращение квадратного в длинное.
Хочу еще раз отметить, я за линки двумя руками, я даже написал почему их надо использовать:mosking:

etc
03.01.2007, 17:36
Использование ссылки mc = __tile[i][j] предпочтительноее, потому что многократное прямое обращение кушает намного больше процессорного времени.
А ещё лучше использовать событийную модель. Т.е. контейнер кричит «Тайл 3,4, отзовись!». Все тайлы смотрят на свои иксы и игреки и тот, у которого совпадают с требуемыми, кричит обратно «Я здесь!».
Правда, я не проверял, быстрее-ли это прямого обращения по имени, но тем не менее, отвязка от имен лучше — опять же повышается мобильность.

Leezard
03.01.2007, 17:47
Использование ссылки mc = __tile[i][j] предпочтительноее, потому что многократное прямое обращение кушает намного больше процессорного времени.

Теоретически возможно, практически вчера проверял, абсолютно одинаково. В цикле изменял альфы всех тайлов обоими методами. Время одно и то же, правда в случае с ссылками мы еще и массив теребим.

etc
03.01.2007, 17:53
правда в случае с ссылками мы еще и массив теребим.
Какой массив? По-моему, без ссылок мы как раз массив на каждой строке и теребим.

Leezard
03.01.2007, 18:01
Какой массив? По-моему, без ссылок мы как раз массив на каждой строке и теребим.
Вот этот массив!
var mc:MovieClip = __tile[i][j];
Массив хранящий ссылки на тайлы.

iNils
03.01.2007, 18:07
Вот этот массив!
var mc:MovieClip = __tile[i][j];
Массив хранящий ссылки на тайлы.
Мы создаем этут ссылку, когда собираемся обратится к клипу более одного раза, и таким образом повышаем быстродействие.

Leezard
03.01.2007, 18:22
Мы создаем этут ссылку, когда собираемся обратится к клипу более одного раза, и таким образом повышаем быстродействие.
Вероятно вы правы.
А если только раз? К одному тайлу раз, и к соседним аналогично. Производительность у обоих методов будет равной. Вернее мы разницы не заметим. Ну вот видите друзья на счет ссылок можно записать еще один жирный плюс :)

Это как заказные убийства диких тушканов на хорошо знакомой вам местности.
В одном случае нам рассказывают как пройти к месту обитания тушкана
- "Из Гадюкино свернешь сразу налево, потом за вторым поворотом будет болото, за ним лес, прямо по просеке, на опушке - тушкан откликается на это имя ..." Дает бумажку на которой в стринговом формате написано "Гена". Мы это все в принципе знаем, но терпеливо слушаем, чтобы не обидеть заказчика. Приходим на опушку, достаем бумажку и гормко читаем - "Ге-е-ен-а-а";
В другом случае мы довольствуемся фотографией искомого тушкана в среде обитания. Вопросов где и кто не возникает.
:taunt:

iNils
03.01.2007, 18:37
Что вы к своим тайлам привязались?:) Есть всегда исключения, когда стоит сделать по другому, но надо помнить, что это исключения и для общих ответов они не подойдут.
А теперь представим, что что метод обработчик действий с тайлами, обрабатывает не конкретный клип с тайлами и различные. То есть мы дожны будет передавать путь до место положения тайлов, вместо того, чтобы дать ссылку на объект (экземпляр класса), а что именно с это ссылкой делать (обращаться к массиву) наш метод знает. Вот вам и первый шаг к ООП. Мы знаеть не знаем, где именно находятся и как именно называются наши тайлы.
В моем примере, если заметили имена у объектов были одинаковы ... вернее их нет.
__tile[x][y] = attachMovie ("tile", "",...

Leezard
03.01.2007, 19:04
Что вы к своим тайлам привязались?:)
Догадайтесь :)

Есть всегда исключения, когда стоит сделать по другому, но надо помнить, что это исключения и для общих ответов они не подойдут.

Золотые слова, это то что я пытался сказать все это время. :taunt:

А теперь представим, что что метод обработчик действий с тайлами, обрабатывает не конкретный клип с тайлами и различные.
Бесспорно, именно поэтому у меня обращения выглядят условно так
mc[i+"_"+j]...
mc (контейнер) на самом деле зарыт очень глубоко. Имеет четкую спецификацию и фиксированные размеры.
И еще момент (исключения) флэш от сервера получает информацию о появившихся в локации особых объектах. Далее он присылает море информации об их действиях и модификациях. Например объект переместился, помер, сказал, упал, сбежал...
Каждый объект в рамках всей системы (сервер-клиент) имеет неповторимый идентификатор. Ну очень просто по приходу стринга от сервера обратиться к объекту mc[id], так просто и естественно, что я , каюсь, забил на мобильность кода. А учитывая что таких объектов может быть много, есть все же в этом некий момент удобства.

В моем примере, если заметили имена у объектов были одинаковы ... вернее их нет.
__tile[x][y] = attachMovie ("tile", "",...
Конечно заметил.

CorC
04.01.2007, 19:33
блин, народ и что вы к этой теме привязались? ведь все было отвечено на 1 странице...
З. Ы.: и как вы в выходные время находите что б тут отвечать

AlexFomin
20.02.2007, 17:26
Пользуясь случаем и темой задам следующий вопрос: может кто подскажет как пользуясь AS 2.0 динамически добавить Object к Object, чтобы получилось нечто вроде Object1.Object2.Object3 и т.п. ?
Спасибо

etc
20.02.2007, 18:30
var o = {};
o.o = {o:o};
trace(o.o.o.o.o.o.o.o.o.o.o.o.o);


:D

AlexFomin
20.02.2007, 19:14
Видимо или не понял, или не так выразился в вопросе(а может и то и другое :) ), нужны динамически именуемые объекты, ибо изначально неизвестно сколько их в иерархии может оказаться.

т.е. будет ли какая-то альтернатива механизму, создающему структуру main.item1.item2.item3....:


var main:Object = new Object;
var obj1:Object = new Object;
var count:Number = 1;
function createObj(obj:Object):Void {

if(count < LIMIT) {

obj["item" + count] = new Object;
obj1 = obj["item" + count];
count++;
createObj(obj1);
}

}
createObj(main);



ещё раз спасибо

etc
20.02.2007, 19:17
Класс не должен знать, кто его предок, и смотреть дальше своих детей.
Т.е. в классе не должно быть более одного уровня вложенности, типа any_mc.another_mc.any_other_mc.
Т.е. класс создает детей-экземпляров какого-либо класса, а те, в свою очередь, создают своих детей.

А про o.o.o.o — это глум :D