Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   обращние к классам, используя "[]" (http://www.flasher.ru/forum/showthread.php?t=187895)

pall92 26.11.2012 04:24

обращние к классам, используя "[]"
 
Здрасте, проблма вообе у меня такая - каждый уровень игры хранится в отедльном элементе библиотеки и принадлежит собственному классу. так вот. сейчас уровней всего два и их загруза меня не волновала.

сделана она через switch:
Код AS3:

public function loadLevel (num:int)
                {
                        switch (num)
                        {
                                case 1:
                                        curStage  = new stage1();
                                        break;
                                case 2:
                                        curStage  = new stage2();
                                        break;       
                                default:
                                        trace("error: can't find level- <",num,">");
 
 
                        }

но, созрелвоопрос как быть дальше, ведь если оставить этот принцип то функия будет просто огромной.
я пытался придумать как динамически выбирать класс
перебрал все варианты:
Код AS3:

new ["stage" + num] ()
[ "new stage" + num ]()
....

ну собственно ничего из этого не получилось. есть ли какой-то вариант решения проблемы этим методом? или может есть какой-то более хитрый способ?

ps возможно я чайник)

СлаваRa 26.11.2012 04:38

как вариант getDefinitionByName()

silin 26.11.2012 09:22

или
Код AS3:

private var levels:Array = [stage1, stage2, stage3];
public function loadLevel (num:int)
{
        try
        {
                curStage  = new levels[num]();
        }catch (err:Error)
        {
                trace("error: can't find level- <",num,">");
        }
 
}

с getDefinitionByName() надо еще обеспечить чтобы классы эти были вкомпилены во флешку, т.е. либо явные ссылки в коде либо include comletely библиотека
с массивом классов это это будет как бы само собой

pall92 26.11.2012 14:25

спасибо за ответ. но что-то не очень могу понять смысл этой функции=\

Возвращает ссылку на объект класса, заданного параметром name - не очень понимаю это описание... неточное какое-то

silin 26.11.2012 14:41

>> Возвращает ссылку на объект класса, заданного параметром name
Код AS3:

public function loadLevel(num:int)
{
        try
        {
                var levelClass:Class = getDefinitionByName("stage" + num) as Class;
                curStage = new levelClass();
        }
        catch (err:Error)
        {
                trace("error: can't find level- <", num, ">");
        }
 
}


kackbip 26.11.2012 15:25

Цитата:

Сообщение от silin (Сообщение 1106313)
Код AS3:

                var levelClass:Class = getChildByName("stage" + num) as Class;


Небольшая опечатка

pall92 26.11.2012 15:26

здорово) спасибо огромное) это то что нужно)

silin 26.11.2012 15:40

Цитата:

Сообщение от kackbip (Сообщение 1106322)
Небольшая опечатка

дада, спасибо, поправил

nOobCrafter 26.11.2012 18:04

Советую автору почитать про фабрики, так проще организовывать приложение будет.

expl 27.11.2012 01:23

Да можно было и свитчь оставить - он же один на всё приложение.
Какая разница как перечислять - в столбик или в линию. Совсем ничего не придется делать при getDefinitionByName, но стоит ли так загоняться ради экономии 20 строчек?

Свитч источник проблем, когда их, _похожих_, больше 2-х в разных частях приложения, причём нехилый.
Но не когда он один.

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


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

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