Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка при обращении к Stage (http://www.flasher.ru/forum/showthread.php?t=202439)

webpenza 16.07.2013 14:08

Ошибка при обращении к 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.

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

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

Спасибо!

caseyryan 16.07.2013 14:26

Вот так делать не нужно:
Код AS3:

if (e) removeEventListener(Event.ADDED_TO_STAGE, init);

Я имею в виду при удалении слушателей не надо ничего проверять. Это безопасная операция.
Здесь я процентов на 99.9 уверен, что проблема именно в том, что слушатель не удаляется.
Советую написать просто
Код AS3:

removeEventListener(Event.ADDED_TO_STAGE, init);

Вообще, такие проблемы чаще всего и возникают потому, что не все слушатели были удалены

Babylon 16.07.2013 14:40

hasEventListener()

webpenza 16.07.2013 15:11

Цитата:

Сообщение от caseyryan (Сообщение 1141193)
Вот так делать не нужно:
Код AS3:

if (e) removeEventListener(Event.ADDED_TO_STAGE, init);

Я имею в виду при удалении слушателей не надо ничего проверять. Это безопасная операция.
Здесь я процентов на 99.9 уверен, что проблема именно в том, что слушатель не удаляется.
Советую написать просто
Код AS3:

removeEventListener(Event.ADDED_TO_STAGE, init);

Вообще, такие проблемы чаще всего и возникают потому, что не все слушатели были удалены

Исправил, не помогло, загрузка падает на том же месте.
Если проблема с удалением слушателя, то почему она повторяется не у всех?

caseyryan 16.07.2013 15:36

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

Сообщение от Babylon (Сообщение 1141194)
hasEventListener()

Думаю это имеет смысл делать, например перед отправкой события. Так как создание события операция более затратная, чем удаление слушателя. Тем более эта проверка проходит автоматически при вызове removeEventListener

webpenza 16.07.2013 16:43

Цитата:

Сообщение от caseyryan (Сообщение 1141198)
Значит с другим слушателм проблема, в другом месте. Тут можно только гадать. Наверняка это происходит не сразу после запуска приложения, а после создания каких-нибудь новых экземпляров того, что уже было создано.

Чем могут мешать другие слушатели?

GBee 16.07.2013 18:03

Объясните еще раз структуру.
Приложение ВК без враппера? Отдельный прелоадер лежащий в вк грузит приложение, лежащее в вк? Или на ваеш сервере? Очень похоже на безопасности ошибку. Падает с каким объяснением? Не найден стейдж или нельзя его трогать?

Babylon 16.07.2013 18:44

Цитата:

Сообщение от caseyryan (Сообщение 1141198)
Думаю это имеет смысл делать, например перед отправкой события. Так как создание события операция более затратная, чем удаление слушателя. Тем более эта проверка проходит автоматически при вызове removeEventListener

Что вы говорите. Значит можно по нескольку раз использовать removeEventListener :)

MikroAcse 16.07.2013 19:22

Вы ошибку то можете показать?

Aquahawk 16.07.2013 19:39

Цитата:

Значит можно по нескольку раз использовать removeEventListener
а что, нельзя? И addEventListener можно сколько угодно.


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

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