![]() |
Leezard вы усложняете себе жизнь, ссылками намного легче работать, их намного легче проверять и при желании их можно назвать как надо а не "tile" +(x-1)+"_"+(y).
iNils и __etc пытаются вам объяснить это, а вы уперлись и отказываетесь понимать, если вы ждете от них что они разжуют и плюнут перевареную пищу вам в рот, то недождетесь =) поищите по форуму, зайдите на flash-ripper.com и посмотрите что пишут люди которые с флэшом уже даже не с пятой а 4-3 версии. |
Цитата:
Я написал ее так (простим мне ламеру использование _root всуе): Код:
function func(x,y){Цитата:
Но, я привожу пример конструкции, где по моему личному, абсолютно не проффесиональному, мнению, использования [], весьма удобно. И в ответ, вместо конкретики или хотя бы объяснения в двух словах (не оптимально по скорости, приводит к багам...) получаю фразы типа: Цитата:
Цитата:
Цитата:
Есть конкретный, очень короткий (см.функцию выше) пример. Покажите как это можно сделать короче, быстрей и понятней. Поскольку я хочу писать код в стиле завтрашнего дня, на AS2 вчерашнего, я попробую разжевать для себя сам, поправьте меня... Создаем объекты с именами "tile1","tile2",..."tile900" для локации (карты) 30х30. Типа так: ---Создаем--- Код:
var counter=1;Код:
for(var i=1;i<=30;i++){Код:
function func(x,y){Какие еще методы обращения к свойствам объектов существуют? Каким образом я могу реализовать ссылка._alpha=100 без квдратных скобок, где ссылка - сложносочиненный стринг. Зачем превращать квадратное, в длинное, для того чтобы затем сделать опять квадратным? |
Код:
_root[name[x][y]].alpha=100 |
Цитата:
|
Проще использовать ссылки и связать каждый тайл с другим. tile_mc.leftUpTile, tile_mc.leftBottomTile, …
Тебе же говорят — нужно использовать ссылки, а не обращаться по имени напрямую. В идеале вообще написать базовый класс Tile с предусмотренными ссылками на восемь соседних клеток. И никакого геморроя не будет. Обратился к искомому тайлу по имени (одни единственные скобки), а ко всем остальным по ссылкам. Это облегчает читабельность кода просто многократно. Более того, в твоем подходе будут ошибки у крайних тайлов, а в случае ссылок можно просто поставить проверку на null. А если пытаться обратиться напрямую, то будет плохо. |
Пример класса. Белым выделенно то, о чем мы с __etc так долго твердили. Плюс я усложнил модель выбора нужного тайла. Выбираем 100% не прозрачен, его окружают с 75%, а следующие кольцо с 50%.
Код:
class MultiTile extends MovieClip {Код:
for (var i:Number = 0; i < 10; i++) { |
iNils, хороший алгоритм :)
Со ссылками, правда, не будет вообще циклов в классе, но будет один большой с присвоением ссылок на соседей… |
Вложений: 2
А я попроще примерчик. :)
Код:
var mc:MovieClip = null; |
Во первых огромный респект за внимание и найденное время для написания кода. На самом деле многого стоит.
Во вторых записки деревенского казуала о сути диспута. Существует два способа обращения к объекту , его методам и свойствам: - Через ссылку; - Непосредственно. Что я собственно хотел услышать и не услышал, это обоснование применения первого и предание анафеме второго. Давайте посмотрим что мы имеем в обоих случаях. 1. обращения к объекту через ссылку. [+] имеем некоторый уровень абстрактности создаваемого кода. То есть создавая некоторую алгоритмическую последовательность будь-то функция или метод класса, абстрагируемся от конкретики и пишем универсальный код. И действительно, если нам нужно, к примеру, написать алгоритм взаимодействия некоторых объектов, все это записывается как в школьной задачке: Код:
объект А имеет 50 процентов прозрачности от объекта Б [+] простота записи, как частный случай первого плюсика. И действительно, ну кому хочется писать Код:
_root.qqq.www.eee.rrr.ttt.yyy.uuu.iii......_alpha=50;Код:
mc._alpha=50;Цитата:
[-] А что в минусах? Почти ничего. Существует правда необходимость дополнительных телодвижений для поддержки работоспособности наших методов и функций. Например в случае с построением карты из объектов - тайлов. Получаем дополнительный массив аналогичной размерности. При обращении к объекту, одна строчка при прямом обращении становится двумя при обращении через ссылку. Почему? Правильно в любом случае надо сначала назначить ссылку при "случайной" выборке объекта из подмножества, и только потом мы можем ее использовать. А в остальном. Все тоже самое, и работа с индексами тайлов, абсолютно таже самая, что в масиве, что при прямом обращении к объекту. Мало того никто не мешает выстроить поле тайлов построчно и тогда прямое обращение к объекту будет иметь вид Код:
mc[i][j]._alpha=...2. О [+]и[-] прямого обращения говорить не имеет смысла, достаточно инвертировать то что сказано выше. И добавить что это метод для эгоистов. Так какие выводы делает деревенский казуал, писатель вчерашенго дня? Если гламурные флэшеры говорят "о боже, фе какая гадость, больше одной штуки на функцию не использовать", в этом наверняка есть смысл! Но если при этом они не говорят почему, значит они полюбому это скрывают, чтобы ты не казался таким же умным как они. :p Шучу. Вы парни достойные. P.S. Друзья, давайте будем немного проще :bye: То что я здесь нагородил, на самом деле умещается в две фразы, которые и стоило написать с самого начала. Всем ОГРОМНОЕ спасибо, заставили подумать ;) , переосмыслить. iNils - тебе особый респект, не первый раз ты тратишь на меня свое время, да и не только на меня. Я бы так не смог. Не обижайся если что, я по доброму. Еще раз огромное всем спасибо, всех с прошедшим новым годом и наступающим рождеством христовым. Всего самого лучшего, интересных проектов и незлых заказчиков. :drinks: |
Все мое "о боже" не дает покоя? Я объясню.
Запись вида Код:
_root[name[x][y]]Цитата:
Код:
var mc:MovieClip = _root.qqq.www.eee.rrr.ttt.yyy.uuu.iii; |
| Часовой пояс GMT +4, время: 12:54. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.