Форум 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)
-   -   Прокрутка текста, cacheAsBitmap (http://www.flasher.ru/forum/showthread.php?t=208965)

razve 27.09.2014 10:33

Прокрутка текста, cacheAsBitmap
 
Перевел урок по прокрутке текста в динамическом поле с AS 3.0 на AS 2.0. Все получилось.
Вместо текстового поля аттачу небольшие мувики с текстовым полем в них. Если мувиков немного - все работает нормально. Если много - они исчезают или не работает маска. В справке нашел такое объяснение:
"Подложка (кэшированное растровое изображение) не создается даже в том случае, когда cacheAsBitmap присваивается значение true, если размер растрового изображения превышает 2880 в ширину или в высоту".
Как можно обойти это ограничение?
Здесь в коде я описал как пытался, что-то изобразить, но получается все равно только кое-что.
Код AS1/AS2:

import flash.geom.Rectangle;
quan = 160;
function creat() {
        this.createEmptyMovieClip("txt", this.getNextHighestDepth(), 0, 0);
        attachMovie("masker", "masker", this.getNextHighestDepth(), {_x:fonlist._x, _y:fonlist._y+2});
        masker.cacheAsBitmap = true;
        txt.cacheAsBitmap = true;
        txt.setMask(masker);
        masker._width = fonlist._width;
        masker._height = fonlist._height-3;
        for (i=0; i<=quan; i++) {
                txt.attachMovie("mc", "mc"+i, i, {_x:0, _y:i*15});
                txt["mc"+i].t.text = i;
        }
          if (txt._height<2800) {
                txt.scrollRect = new Rectangle(0, 0, txt._width, txt._height);
        } else {
                txt.scrollRect = new Rectangle(0, 0, txt._width, 15*20);
          //если в условие "высота 2880" контейнер не вписывается,
          //то я задаю предварительную небольшую его высоту, 15 - высота одного мувика
        }
}
creat();
//
function moveHandler() {
        var more = quan*txt.mc0._height-txt.mc0._height*20;
        txt.scrollRect = new Rectangle(0, 0, txt._width, more);
          //этими двумя строчками создаю контейнер по всей высоте мувика txt,
          //получается, но цифры в текстовых полях видны, а мувики пропадают,
          //кроме первого; также если добавить полоску выделения и возможность выбора,
          //то после клика на каком-либо мувике и фиксирования на нем полоски выделения,
          //при прокрутке вниз эта полоска не прячется под маску, хотя мувики под ней не видны
        var rect:Rectangle = txt.scrollRect;
        var percent:Number = scrollBar.scroller._y/(scrollBar.scrollLine._height-scrollBar.scroller._height)*(rect.height-masker._height);
        rect.y = percent;
        txt.scrollRect = rect;
}


dvrbear 29.09.2014 14:29

Если вам требуется прокрутка блоков-картинок. И блоки должны прокручиваться в некой видимой зоне. То единственное, что бы я посоветовал, это - подгружать по мере необходимости рядом стоящие блоки с видимым и удалять все те которые попадают далеко за область видимости.

При этом конечно придется написать хитрый скролл - который будет работать с индексами блоков и их координатами. И по сути блоки не будут доходить до -2880/2800. Вы просто будете перебрасывать их на поддельные координаты.

Единственное за что можно переживать - это если пользователь начнет слишком быстро дергать скролл.

razve 01.10.2014 10:32

Спасибо!
Попробовал так, но оказалось, нужно для каждого блока делать свою маску - текстовые поля динамические. Это меня что-то напугало) Но пока маялся нашел такой выход:
В функции creat() все также создаю контейнер с небольшой высотой
Код AS1/AS2:

txt.scrollRect = new Rectangle(0, 0, txt._width, 15*20);

А в функции moveHandler() увеличиваю переменную percent:
Код AS1/AS2:

rect.y = percent*(quan/9.1);

И все. Аттачу мувиков хоть 300, хоть 1000, размер txt на прокрутку никак уже не влияет.
Единственное, что не получается - написать алгоритм для увеличения percent, чтобы прокрутка останавливалась на последнем мувике.
Если мувиков 300, то:
Код AS1/AS2:

rect.y = percent*(quan/9.1);

Если мувиков 1000, то:
Код AS1/AS2:

rect.y = percent*(quan/8.888);



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

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