Показать сообщение отдельно
Старый 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 вынести как отдельный класс, все работает отлично. Так же будет если переменную сделать не статической.

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