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

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

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

Регистрация: Jul 2013
Сообщений: 4
По умолчанию Ошибка при обращении к Stage

Добрый день!

Возникла следующая проблема:

Приложение работает из VK. Есть загрузчик приложения, который отображает процесс загрузки и инициализирует само приложение игры.

Так вот, в момент инициализации приложения из загрузчика приложение падает на обращении к Stage.

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

У некоторых людей грузиться нормально, у некоторых не инициализируется по непонятным причинам.

Этот метод вызывается из загрузчика когда игра загружена:

Код AS3:
		public function initGame(loadingDataComplete:Function, rebuild:Function, resourcesManager:*):void
		{
			this.loadingDataComplete = loadingDataComplete;
			Singleton.rebuild = rebuild;
			new ResourcesManager(resourcesManager);
 
			if (stage)	init(null);
			else		this.addEventListener(Event.ADDED_TO_STAGE, init);
		}
а вот метод init, в нем собственно и падает приложение:

Код AS3:
		private function init(e:Event):void 
		{
			MonsterDebugger.initialize(this);
			if (e) removeEventListener(Event.ADDED_TO_STAGE, init);
			Security.allowDomain("*");
			MonsterDebugger.trace(this, "GAME INIT");
 
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.frameRate = 24;
			Singleton.rStage = stage;
			Settings.stageH = stage.stageHeight;
			Settings.stageW = stage.stageWidth;
 
			Singleton.isoWorld = new IsoWorld( 37, -45, 0);
			Singleton.isoWorld.tileHalfHeight = 15;
			Singleton.isoWorld.tileHalfWidth = 25;
			new CookiesController();
			new SoundsManager();
			new APIController();
			firstLoadManager = new FirstLoadManager(initClasses);
		}
выполнение останавливается на строчке stage.scaleMode = StageScaleMode.NO_SCALE;

Если ее убрать, то на следующем обращении к storage.

Подскажите, может есть какие-то настройки безопасности в браузере или системы, которые запрещают такие обращения?

Или какие еще причины могут привести к подобному поведению и как их обойти?

Спасибо!

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Вот так делать не нужно:
Код AS3:
if (e) removeEventListener(Event.ADDED_TO_STAGE, init);
Я имею в виду при удалении слушателей не надо ничего проверять. Это безопасная операция.
Здесь я процентов на 99.9 уверен, что проблема именно в том, что слушатель не удаляется.
Советую написать просто
Код AS3:
removeEventListener(Event.ADDED_TO_STAGE, init);
Вообще, такие проблемы чаще всего и возникают потому, что не все слушатели были удалены

Старый 16.07.2013, 14:40
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 3  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
hasEventListener()

Старый 16.07.2013, 15:11
webpenza вне форума Посмотреть профиль Отправить личное сообщение для webpenza Найти все сообщения от webpenza
  № 4  
Ответить с цитированием
webpenza

Регистрация: Jul 2013
Сообщений: 4
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Вот так делать не нужно:
Код AS3:
if (e) removeEventListener(Event.ADDED_TO_STAGE, init);
Я имею в виду при удалении слушателей не надо ничего проверять. Это безопасная операция.
Здесь я процентов на 99.9 уверен, что проблема именно в том, что слушатель не удаляется.
Советую написать просто
Код AS3:
removeEventListener(Event.ADDED_TO_STAGE, init);
Вообще, такие проблемы чаще всего и возникают потому, что не все слушатели были удалены
Исправил, не помогло, загрузка падает на том же месте.
Если проблема с удалением слушателя, то почему она повторяется не у всех?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Значит с другим слушателм проблема, в другом месте. Тут можно только гадать. Наверняка это происходит не сразу после запуска приложения, а после создания каких-нибудь новых экземпляров того, что уже было создано
Конкретно в этом участке кода я каких-то особых проблем не вижу.
Цитата:
Сообщение от Babylon Посмотреть сообщение
hasEventListener()
Думаю это имеет смысл делать, например перед отправкой события. Так как создание события операция более затратная, чем удаление слушателя. Тем более эта проверка проходит автоматически при вызове removeEventListener

Старый 16.07.2013, 16:43
webpenza вне форума Посмотреть профиль Отправить личное сообщение для webpenza Найти все сообщения от webpenza
  № 6  
Ответить с цитированием
webpenza

Регистрация: Jul 2013
Сообщений: 4
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Значит с другим слушателм проблема, в другом месте. Тут можно только гадать. Наверняка это происходит не сразу после запуска приложения, а после создания каких-нибудь новых экземпляров того, что уже было создано.
Чем могут мешать другие слушатели?

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Объясните еще раз структуру.
Приложение ВК без враппера? Отдельный прелоадер лежащий в вк грузит приложение, лежащее в вк? Или на ваеш сервере? Очень похоже на безопасности ошибку. Падает с каким объяснением? Не найден стейдж или нельзя его трогать?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 16.07.2013, 18:44
Babylon вне форума Посмотреть профиль Отправить личное сообщение для Babylon Посетить домашнюю страницу Babylon Найти все сообщения от Babylon
  № 8  
Ответить с цитированием
Babylon
[+1 25.10.13]
[+4 18.03.14]
 
Аватар для Babylon

Регистрация: Jan 2006
Адрес: Москва, Зеленоград
Сообщений: 653
Отправить сообщение для Babylon с помощью ICQ
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Думаю это имеет смысл делать, например перед отправкой события. Так как создание события операция более затратная, чем удаление слушателя. Тем более эта проверка проходит автоматически при вызове removeEventListener
Что вы говорите. Значит можно по нескольку раз использовать removeEventListener

Старый 16.07.2013, 19:22
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 9  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Вы ошибку то можете показать?

Старый 16.07.2013, 19:39
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 10  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Цитата:
Значит можно по нескольку раз использовать removeEventListener
а что, нельзя? И addEventListener можно сколько угодно.
__________________
:)

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

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

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


 


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


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