Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.11.2012, 04:24
pall92 вне форума Посмотреть профиль Отправить личное сообщение для pall92 Найти все сообщения от pall92
  № 1  
Ответить с цитированием
pall92

Регистрация: Jul 2012
Сообщений: 66
По умолчанию обращние к классам, используя "[]"

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

сделана она через 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 возможно я чайник)

Старый 26.11.2012, 04:38
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 2  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
как вариант getDefinitionByName()
__________________
местонахождение

Старый 26.11.2012, 09:22
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
или
Код 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 библиотека
с массивом классов это это будет как бы само собой

Старый 26.11.2012, 14:25
pall92 вне форума Посмотреть профиль Отправить личное сообщение для pall92 Найти все сообщения от pall92
  № 4  
Ответить с цитированием
pall92

Регистрация: Jul 2012
Сообщений: 66
спасибо за ответ. но что-то не очень могу понять смысл этой функции=\

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

Старый 26.11.2012, 14:41
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>> Возвращает ссылку на объект класса, заданного параметром 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, ">");
	}
 
}


Последний раз редактировалось silin; 26.11.2012 в 15:39.
Старый 26.11.2012, 15:25
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 6  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Цитата:
Сообщение от silin Посмотреть сообщение
Код AS3:
		var levelClass:Class = getChildByName("stage" + num) as Class;
Небольшая опечатка

Старый 26.11.2012, 15:26
pall92 вне форума Посмотреть профиль Отправить личное сообщение для pall92 Найти все сообщения от pall92
  № 7  
Ответить с цитированием
pall92

Регистрация: Jul 2012
Сообщений: 66
здорово) спасибо огромное) это то что нужно)

Старый 26.11.2012, 15:40
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Сообщение от kackbip Посмотреть сообщение
Небольшая опечатка
дада, спасибо, поправил

Старый 26.11.2012, 18:04
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 9  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
Советую автору почитать про фабрики, так проще организовывать приложение будет.

Старый 27.11.2012, 01:23
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 10  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Да можно было и свитчь оставить - он же один на всё приложение.
Какая разница как перечислять - в столбик или в линию. Совсем ничего не придется делать при getDefinitionByName, но стоит ли так загоняться ради экономии 20 строчек?

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

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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