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

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

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

Регистрация: Jun 2014
Сообщений: 52
По умолчанию Прокрутка текста, 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;
}

Старый 29.09.2014, 14:29
dvrbear вне форума Посмотреть профиль Отправить личное сообщение для dvrbear Найти все сообщения от dvrbear
  № 2  
Ответить с цитированием
dvrbear
[+1.3 06.03.12]
 
Аватар для dvrbear

Регистрация: Oct 2003
Адрес: Moldova, Kishinev
Сообщений: 133
Отправить сообщение для dvrbear с помощью ICQ Отправить сообщение для dvrbear с помощью Skype™
Если вам требуется прокрутка блоков-картинок. И блоки должны прокручиваться в некой видимой зоне. То единственное, что бы я посоветовал, это - подгружать по мере необходимости рядом стоящие блоки с видимым и удалять все те которые попадают далеко за область видимости.

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

Единственное за что можно переживать - это если пользователь начнет слишком быстро дергать скролл.
__________________
http://apa-noua.com/portfolio

Старый 01.10.2014, 10:32
razve вне форума Посмотреть профиль Отправить личное сообщение для razve Найти все сообщения от razve
  № 3  
Ответить с цитированием
razve
 
Аватар для razve

Регистрация: Jun 2014
Сообщений: 52
Спасибо!
Попробовал так, но оказалось, нужно для каждого блока делать свою маску - текстовые поля динамические. Это меня что-то напугало) Но пока маялся нашел такой выход:
В функции 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, время: 10:02.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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