Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   динамическое создание объектов (http://www.flasher.ru/forum/showthread.php?t=89951)

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

Цитата:

Сообщение от Riin
никак не моку додуматься, почему вот ЭТО не работает...
Код:

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

Цитата:

Сообщение от Leezard
Код:

_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

Цитата:

Сообщение от iNils
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

Цитата:

Сообщение от __etc
Квадратные скобки неудобны никогда. Их количество не должно превышать одной штуки на подобный блок кода.

Ну допустим, принимаю как аксиому. Теперь осталось только сказать почему. Тогда, возвращаясь к примеру, как реализовать функцию изменяющую, например, альфу у блока объектов находящихся в муве контейнере "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

Цитата:

Сообщение от iNils
Код:

_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

Вложений: 2
А я попроще примерчик. :)
Код:

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

Цитата:

Сообщение от iNils
Все мое "о боже" не дает покоя? Я объясню.
Запись вида
Код:

_root[name[x][y]]
говорит о том, что значение элемента массива имеет тип String, и вместо того, чтобы напрямую получить ссылку к объекту, мы опять привязываемся непонятно к чему.

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

Цитата:

Сообщение от iNils
Это про то, что надо сделать:
Код:

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

Цитата:

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

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

etc 03.01.2007 17:53

Цитата:

Сообщение от Leezard
правда в случае с ссылками мы еще и массив теребим.

Какой массив? По-моему, без ссылок мы как раз массив на каждой строке и теребим.

Leezard 03.01.2007 18:01

Цитата:

Сообщение от __etc
Какой массив? По-моему, без ссылок мы как раз массив на каждой строке и теребим.

Вот этот массив!
Код:

var mc:MovieClip = __tile[i][j];
Массив хранящий ссылки на тайлы.

iNils 03.01.2007 18:07

Цитата:

Сообщение от Leezard
Вот этот массив!
Код:

var mc:MovieClip = __tile[i][j];
Массив хранящий ссылки на тайлы.

Мы создаем этут ссылку, когда собираемся обратится к клипу более одного раза, и таким образом повышаем быстродействие.

Leezard 03.01.2007 18:22

Цитата:

Сообщение от iNils
Мы создаем этут ссылку, когда собираемся обратится к клипу более одного раза, и таким образом повышаем быстродействие.

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

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

iNils 03.01.2007 18:37

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

__tile[x][y] = attachMovie ("tile", "",...

Leezard 03.01.2007 19:04

Цитата:

Сообщение от iNils
Что вы к своим тайлам привязались?:)

Догадайтесь :)
Цитата:

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

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

Сообщение от iNils
А теперь представим, что что метод обработчик действий с тайлами, обрабатывает не конкретный клип с тайлами и различные.

Бесспорно, именно поэтому у меня обращения выглядят условно так
Код:

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

Сообщение от iNils
В моем примере, если заметили имена у объектов были одинаковы ... вернее их нет.
Код:

__tile[x][y] = attachMovie ("tile", "",...

Конечно заметил.

CorC 04.01.2007 19:33

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


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

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