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

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

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
По умолчанию Интересный баг as3, instantiation on non-constructor

Обнаружил сегодня интересную штуку. Если сделать в классе вот так
Код AS3:
private static var _achievements:Array = [
	new Achievement(100, 1, AchievementCondition.KILL_ZOMBIES),
	new Achievement(101, 100, AchievementCondition.KILL_ZOMBIES),
	new Achievement(102, 500, AchievementCondition.KILL_ZOMBIES),
	new Achievement(103, 1000, AchievementCondition.KILL_ZOMBIES),
	new Achievement(104, 5000, AchievementCondition.KILL_ZOMBIES),
	new Achievement(105, 10000, AchievementCondition.KILL_ZOMBIES),
	new Achievement(106, 50000, AchievementCondition.KILL_ZOMBIES),
	new Achievement(107, 100000, AchievementCondition.KILL_ZOMBIES),
	new Achievement(201, 10, AchievementCondition.KILL_BOSSES),
	new Achievement(202, 50, AchievementCondition.KILL_BOSSES),
	new Achievement(301, 10, AchievementCondition.SPEND_TIME_IN_GAME),
	new Achievement(302, 60, AchievementCondition.SPEND_TIME_IN_GAME),
	new Achievement(303, 120, AchievementCondition.SPEND_TIME_IN_GAME),
	new Achievement(304, 120, AchievementCondition.SPEND_TIME_IN_GAME),
	new Achievement(305, 300, AchievementCondition.SPEND_TIME_IN_GAME),
	new Achievement(306, 30, AchievementCondition.SPEND_TIME_IN_GAME),
	new Achievement(401, 10, AchievementCondition.COLLECT_WEAPONS),
	new Achievement(501, 10, AchievementCondition.COLLECT_KEYS),
	new Achievement(502, 50, AchievementCondition.COLLECT_KEYS),
	new Achievement(503, 100, AchievementCondition.COLLECT_KEYS),
	new Achievement(601, 5, AchievementCondition.COLLECT_ARTEFACTS),
	new Achievement(602, 50, AchievementCondition.COLLECT_ARTEFACTS),
	new Achievement(603, 100, AchievementCondition.COLLECT_ARTEFACTS),
	new Achievement(604, 500, AchievementCondition.COLLECT_ARTEFACTS),
	new Achievement(701, 2, AchievementCondition.PASS_CHAPTER),
	new Achievement(702, 10, AchievementCondition.PASS_CHAPTER),
	new Achievement(703, 20, AchievementCondition.PASS_CHAPTER)
];
А сам класс Achievement объявить в том же файле как internal, то в рантайме вывалится ошибка
Код AS3:
instantiation on non-constructor
Стало быть статики инициализируются раньше, чем internal классы. Если же Achievement вынести как отдельный класс, все работает отлично. Так же будет если переменную сделать не статической.

п.с. это не вопрос почему так происходит, а просто решил поделиться инфой)
__________________
Ко мне можно и нужно обращаться на ты)

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Тоже как-то раз напоролся на подобное поведение, связанное с не явным порядком вызова статического конструктора в as3. Вообще, стараюсь не использовать статику там, где можно обойтись обычным классом.

Кстати, а почему статика и почему internal?
__________________
Дети не должны знать о своих родителях

Старый 08.02.2016, 12:20
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
internal потому что больше нигде не используется, это просто вспомогательный класс, который нужен только здесь. А static хз, просто по привычке)
__________________
Ко мне можно и нужно обращаться на ты)

Старый 08.02.2016, 12:21
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 4  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Ясно )
__________________
Дети не должны знать о своих родителях

Старый 08.02.2016, 13:07
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 5  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Похоже он просто определение класса не находит. Если перенести Achievement в начало файла, то всё заработает.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 08.02.2016, 13:12
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от alatar Посмотреть сообщение
Похоже он просто определение класса не находит. Если перенести Achievement в начало файла, то всё заработает.
Ну да. Значит все-таки есть места, где порядок размещения определений в as3 имеет значение. Я почему-то был уверен, что сначала он собирает информацию обо всех классах, а уже потом инициализирует статики
__________________
Ко мне можно и нужно обращаться на ты)

Старый 08.02.2016, 13:28
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 7  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Надо байткод смотреть... но лень.
__________________
משיח לא בא
משיח גם לא מטלפן

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

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

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


 


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


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