Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Быстрый скролл контента клипа (http://www.flasher.ru/forum/showthread.php?t=128899)

dark256 19.08.2009 20:12

Быстрый скролл контента клипа
 
Собсссно: имеем большущую карту местности для игрухи.
Куча аттачнутых одинаковых клеток, в которые загружаются пнг - поверхности, и всякие векторные домики и прочее.
Карта в экран ессно не влазит, поэтому стрелочками ее туда сюда скроллируем. Поскольку карта изрядна - 40 на 40 клеток 180 на 150 пикселей, то притормаживает.

Изначально сделал так:
Код AS1/AS2:

var mark = _root.createEmptyMovieClip("mark",1000)        // Поверхность
for (var i=0; i<40; i++)
{
        for (var j=0; j<40; j++)
        {
                var sota = mark.attachMovie("SOTA","SOTA"+sotCounter,mark.getNextHighestDepth())
                        loadmovie(file, sota.surface)
                        sota.pad rollover rollout etc...
            }
}

При наведении на соотв стрелочку-кнопку по onEnterFrame делаем mark._x +=10
и аналогично для остальных трех направлений
Покрутил. Тормозит. Сказал что mark.cacheAsBitmap именно true
Покрутил. Тормозит. Ругнулся. Полез на форум. В результате набрел на вот такое вот:

Код AS1/AS2:

var mark:MovieClip = setUpContainer()
var window:Rectangle = new Rectangle(0, 0, Stage.width, Stage.height);
mark.scrollRect = window
 
function setUpContainer():MovieClip
{
    var mc:MovieClip = _root.createEmptyMovieClip("mark",1000)
    var content:MovieClip = mc.createEmptyMovieClip("content", 100)
    //content.cacheAsBitmap = true
    return mc
}

далее в mark.container аттачим и подгружаем все как и ранее.

На координатные кнопки повесил в ЭнтерФрэйме _root.mark.content._x += 10
Покрутил. Тормозит. Раскомментил строчку за кэширование как битмап.
Покрутил. Тормозит. Собссно вопрос - это в морг или я с этим scrollRect недоразобрался?

rainbowrussia 19.08.2009 23:34

Я так думаю что картинки за пределами видимости необходимо скрывать и не скроллить.

dark256 20.08.2009 00:43

Цитата:

Сообщение от rainbowrussia (Сообщение 844075)
Я так думаю что картинки за пределами видимости необходимо скрывать и не скроллить.

Ну вообще-то видна ТОЛЬКО область внутри window. То есть физиологический размер карты условно говоря 4000 на 4000, а видимая область в контенте 600 на 600.
Хотите сказать что тем клеткам, которые вне вьюпорта следует писать _visible = false?

Ну это я попробую, просто удивился - приведенный мною код так густо разрекламирован как панацея, и столь сильно рекомендован, что я подумал - щас все проблемы решатся. Ан нет. Соотвтественно я вот усомнился в правильности применения данного кода к моему случаю. Собственно ни разу подобные конструктивы не использовал, вот и думаю - не упустил ли я какие-то подводные камни. Вот :(

dimarik 20.08.2009 08:22

Цитата:

Сказал что mark.cacheAsBitmap именно true
Покрутил. Тормозит. Ругнулся.
Цитата:

То есть физиологический размер карты условно говоря 4000 на 4000,
Код:

In the following cases a movie clip does not use a bitmap even
if the cacheAsBitmap property is set to true, and instead renders
the movie clip from vector data:

- The bitmap is too large: greater than 2880 pixels in either direction.
- The bitmap fails to allocate memory (due to an out of memory error).


dark256 20.08.2009 10:47

Да.... но: у меня не единичный битмап 2880х, а клип, собранный из битмапов 170 на 140....
Из приведенного текста я понял что именно из-за крупных битмапов a movie clip does not use a bitmap even
if the cacheAsBitmap property is set to true

Wolsh 20.08.2009 15:08

Неправильно понял. Кеш в битмап не применяется, если клип больше 2880, и клип рендерится как обычно, вектором.

dark256 20.08.2009 15:24

Спасибо!... печально.... значит тупо сляпать эту шнягу не получится.... грусть тоска.... эх....

incorp 20.08.2009 15:40

мне кажется может прокатить если порезать большую локацию на несколько "комнат". тобишь быстрый скрол в пределах одной комнаты и подгрузка при переходе. скорее всего по другому и не выйдет.

aFriend 20.08.2009 17:17

Цитата:

Сообщение от Wolsh (Сообщение 844158)
Кеш в битмап не применяется, если клип больше 2880.

А разве может быть больше?
Мне вот например нужно создать stage на 3500 - но не даёт, однако! :rtfm:
Или можно обойти это ограничение?

Wolsh 20.08.2009 17:47

Клип и Stage не одно и то же.


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

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