Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   bitmapData работает через раз (http://www.flasher.ru/forum/showthread.php?t=210192)

faraday 06.02.2015 14:40

bitmapData работает через раз
 
Здравствуйте, в игре имеется карта состоящая из нескольких слоев: растровый фон (2500*2000 bitmap), и около 100 городов, которые для скорости работы анимаций фильтров пересчитываются в растр bitmap.draw(sprite).applyFilter(glow);
У 98% игроков карта рендерится за ~3 сек, но у остальных клиент подвисает на минуту или плюется ошибками, вот пример такой сессии (данные на входе тут у всех одинаковые) http://i.imgur.com/XVeYIt4.png
Выбивает в основном ошибку 1502 (скрипт дольше 15 сек), 1009 (null не имеет свойств) или 2015 (invalid bitmapData) При чем выбивает постоянно в разных местах http://i.imgur.com/apziOw0.png
В другой сессии у тех же игроков, иногда все грузится нормально. ТО есть закономерности отследить сложно. Пробовал поднимать лимит выполнения скрипта на 60 сек, но результат тот же. Свободной оперативной памяти при старте игры тоже нормально.
В чем может быть проблема и как ее можно решить? Пока первое что приходит на ум - это считать битмапы городов порциями при enterFrame , по идее асинхронность должна решить 1502 ошибку. Но хз что с 2015 BitmapData(2500, 2000, true, 0); вроде в лимит это не упирается, тем более в других сессия работает норм.

gloomyBrain 06.02.2015 15:03

"Invalid BitmapData" обычно возникает, при попытке создания новго объекта BitmapData с нулевыми размерами по одной или двум осям. Может быть такое? Например, в момент вызова draw отображение города еще не полностью подгрузилось и имеет размеры 0x0.

faraday 06.02.2015 15:12

Нет, в конструктор для границ стран передаются константы BitmapData(2500, 2000, true, 0);
А что касается размера городов. они берутся из библиотечных шейпов. так что если б были нулевые - размеры заметил.
http://i.imgur.com/gh23sjZ.png

Добавлено через 48 часов 15 минут
Invalid Bitmap скорее всего вознкиает из-за отсутсвия памяти. Хотя там всего то создаются 3 битмапы 2500*2000. С ошибкой 1502 - по-прежнему не понятно, почему у некоторых все отрисовывается за секунду, а у других висит по минуте. Поможет ли вынесение работы с битмапой в отдельный Woker? Стоит ли попробовать вариант с асснхронным циклом? мне он кажется бесполезным..


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

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