Форум 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)
-   -   Обращение к клипам без Instance Name (http://www.flasher.ru/forum/showthread.php?t=81782)

CursedScroll 27.06.2006 17:19

Обращение к клипам без Instance Name
 
Здравствуйте.
Есть ли возможность при помощи AS обратиться к клипам, не имеющим Instance Name?
Задача поставлена следующим образом: делается игра в Flash 8 со своим встроенным редактором уровней. Редактор должен быть сконструирован так, чтобы дизайнер, который им будет пользоваться, мог просто перетаскивать нужные предметы из библиотеки в сцену, не заботясь о прописывании InNm-ов. Таким образом, необходимо как-то получить список всех клипов лежащих в определенном слое или кадре и потом как-то к ним обращаться.
Возможно ли это?
Спасибо.

Cvazimodo 27.06.2006 17:34

instanceName'сы есть у всех мувов, не зависимо, прописали их или нет.
В случае, если пользователь не прописал эти имена явно, они назначаются (генерируются) автоматически.

Получить все мувы в другом муве можно просто перебирая все элементы и проверяя их тип (typeof()== 'movieclip').

CursedScroll 27.06.2006 17:46

Цитата:

Сообщение от Cvazimodo
Получить все мувы в другом муве можно просто перебирая все элементы и проверяя их тип (typeof()== 'movieclip').

Все уровни игры запихнуты в отдельный клип "Locations", в нем есть слой "Items". Предполагается, что дизайнер будет выкладывать предметы на этот слой. Если я обращусь к "Locations" и опрошу его при помощи (typeof()== 'movieclip') -- я получу список всех клипов, которые в нем содержаться. Как выделить те, которые нужны?

PS Я понимаю, что архитектура достаточно странная, но менять ее мы, к сожалению, не можем =\

Cvazimodo 27.06.2006 17:55

Всё зависит только от конкретной задачи. Я бы делал примерно так:
Код:

for (var ii in Locations) {
        // перебираемый эелемент является клипом?
        if (typeof(Locations[ii]) == "movieclip") {
                // что это за клип?
                if (Locations[ii].itemType == "carpet") {
                        // да, мы нашли ковёр и с ним надо что-то делать :)
                }
        }
}

А в библиотеке эелемент, изображающего ковер, нужно немного отредактировать. Заходим внутрь (ковра в библиотеке) и на первом кадре пишем:
Код:

this.itemType = 'carpet';
Что-то подобное... И пусть после этого дизайнер таскает этот мувик куда угодно (внутри Locations).

__i 27.06.2006 19:12

все мувики по умолчанию нумеруються instanse0, instanse1... и т.д.

по этим именам можно к ним обращаться

CursedScroll 27.06.2006 19:57

Код из примера не работал, я его изменил:
Код:

for (var i in Locations) {
        // перебираемый эелемент является клипом?
        if (typeof (Locations[i]) == "movieclip") {
                var tst = eval(targetPath(Locations[i]));
                // что это за клип?
                if (tst.itemType == "carpet") {               
                        trace(">>>>>>>>>");
                }
        }
}

В таком варианте все заработало, спасибо!

А нет ли какой-то возможности брать конкретный слой, узнавать, что на нем лежит и потом с этим работать?

Double 27.06.2006 20:09

сделай ему редактор на АС, чтобы он(дезигнер) уровни "генерил" в плеере. тут же пусть и тестирует.

CursedScroll 27.06.2006 20:13

Цитата:

Сообщение от Double
сделай ему редактор на АС, чтобы он(дезигнер) уровни "генерил" в плеере. тут же пусть и тестирует.

Тоже вариант, боюсь только, что в бюджет не впишимся =)

Double 27.06.2006 20:17

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

__i 27.06.2006 20:21

Цитата:

Сообщение от CursedScroll
Код из примера не работал, я его изменил:
А нет ли какой-то возможности брать конкретный слой, узнавать, что на нем лежит и потом с этим работать?

а зачем тебе слой ? в готовой свф всеравно их нету!


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

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