Форум 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)
-   -   приручение ScrollPane (http://www.flasher.ru/forum/showthread.php?t=89224)

Pow R. Toc H. 10.12.2006 19:04

приручение ScrollPane
 
у меня в компонент ScrollPane загружается мувик, в котором присутствует код, создающий динамически набор элементов.. которые будут выходить за пределы видимости всего поля scrollPane...
и так получается, что scrollPane выводит полосы прокрутки по отношению к первоначальному размера клипа, но не изменяется когда добовляються в этом клипе новые элементы.. тем самым клип увеличивается, но нет возможности просмотреть его полностью... ScrollPanel "обрезает" его, не изменяет область прокрутки..
может есть средство борьбы с этим?

Pow R. Toc H. 11.12.2006 02:43

хорошо.. может можно тогда сначало внедрить мувик в ScrollPane и обращаться к нему из главного клипа?.
не могу подобрать нужный путь этом случае...

terbooter 11.12.2006 09:17

Странно...
Делал именно так как ты описываешь-- в компонент
ScrollPane добавлял мувик в котором динамически создавались другие мувики.
Вот --
http://www.fenix-k.ru/dom_flash.html
полоса прокрутки зависит от размеров
вложенного мувика и при прокручивании позволяет просмотреть
все его части.

Pow R. Toc H. 11.12.2006 14:00

слушай.. а куском кода не можешь поделится?.. может я не в той последовательности реализую это...

terbooter 12.12.2006 12:53

Это в таймлайне
Код:

luxory_scroll.contentPath="luxory_id";
Это на монтажной линейке клипа с линкайдж luxory_id



Код:

import org.dembicki.BitmapLibrary;
import flash.display.BitmapData;
var line_N=0;
for (i=1; i<=_root.luxory_number; i++) {
       
       
        obn2=["pol_but"+i];
        this.attachMovie("pol_but","pol_but"+i,i);
        this["pol_but"+i]._xscale=100;
        this[obn2]._yscale=100;
       
        line_X=(i-1)%5;
        this[obn2]._x=10+110*(line_X);
        if ((i-1)%5 == 0){line_N++;}
        this[obn2]._y=10+150*(line_N-1);
        trace("LIneX="+line_X+" lineY="+line_N);
       
                this[obn2].onLoadMapHandler = function(url:String, bitmap:BitmapData)
                {
                i=this.getDepth()-1;
                this.tile_name=_root.luxory_ar_des[i];
                trace("title  "+_root.luxory_ar_des[i])
                trace("url  "+_root.luxory_ar[i])
               
                this.bmp= bitmap;
                this.createEmptyMovieClip("c",3);
                this.c._y=25;
                this.c._yscale=100;
                this.c._xscale=100;
                this.c.attachBitmap(this.bmp, 0);
               
               
                this.onPress = function()
                {
                for(i=1;i<34;i++)
                {
                _root.room.pol["pol_tile"+i].createEmptyMovieClip("c",3);
                _root.room.pol["pol_tile"+i].c._xscale=70;
                _root.room.pol["pol_tile"+i].c._yscale=70;
                _root.room.pol["pol_tile"+i].c.attachBitmap(this.bmp,990)
               
                               
                }
               
                };
                }
        this[obn2].onLoadMapError = function(url:String) {
                //trace("onLoadMapError "+url);
        };
        this[obn2].onLoadCompleteMap = function(url:String) {
                //trace("onLoadCompleteMap "+url);
        };
        this[obn2].onLoadProgressMap = function(url:String, loaded:Number, total:Number) {
                //trace("\t"+url+""+Math.round(loaded/total*100)+"%");
                this.tpole=Math.round(loaded/total*100)+"%";
        };
        this[obn2].onLoadStartMap = function(url:String) {
                //trace("onLoadStartMap "+url);
        };
}


for (i=1; i<=_root.luxory_number; i++) {
                myname = "img/pol/lam_efloor/luxory/"+_root.luxory_ar[i-1];
                obn2=  ["pol_but"+i];
        //_root[obn]._xscale = 50;
        //trace(myname);
        BitmapLibrary.getInstance().getBitmap(myname, this[obn2], this[obn2].onLoadMapHandler, this[obn2].onLoadMapError, this[obn2].onLoadCompleteMap, this[obn2].onLoadProgressMap, this[obn2].onLoadStartMap);
}
_root.stop();

Сам код конечно прекорявый -)))
Но тогда было важно чтоб работало...

Pow R. Toc H. 12.12.2006 15:47

ого.. спасибо.. буду разбираться...

vento 18.12.2006 12:49

У меня та же проблема. Есть вариант скомпилировать мувиклип как отдельный swf и указывать его в contentPath. Тогда все работает. Но это не комильфо.
У меня мувиклип отрисовывает содержимое с нуля программным способом: создаются дочерние мувиклипы, рисуются линии и области. Так и не решил как побороть. Если найдете решение, напишите плиз.

для terbooter: если не секрет, зачем у мувиклипа в конце стоит _root.stop();?

Pow R. Toc H. 19.12.2006 01:26

скинь мне свой простой не работющей пример.. я попробую запустить его..
я свою проблему решил, но немного другим способом.. корень так и не нашёл..

vento 19.12.2006 17:33

Кажется разобрался.

Изначально у меня было так:
1. в бибилиотеке находятся: ScrollPane, mcEmpt (с линками)
2. в тайм лайн основной сцены:
Код:

this.createObject("ScrollPane", "csp", this.getNextHighestDepth());
csp.setSize(Stage.width,Stage.height);
csp.move(0,0, true);
csp.contentPath = "mcEmpt";

3. в тайм лайн mcEmpt (строится диаграмма, данные для которой подгружаются в виде XML-файла):
Код:

var doc:XML = new XML();                // Источник данных
var mcLines:MovieClip = this;               
// ^ Люблю работать с именованными указателями
// хотя можно и так: var mcLines:MovieClip = this.createEmptyMovieClip("mcLines", this.getNextHighestDepth());
// и дальше использовать mcLines как использовал c учетом более глубокой вложенности. В общем это не проблема отрисовки полос прокрутки в ScrollPane.

trace(targetPath(this));        // _level0.csp.spContentHolder
trace(targetPath(mcLines));        // _level0.csp.spContentHolder или _level0.csp.spContentHolder.mcLines если через this.createEmptyMovieClip

doc.onLoad = function (success:Boolean)
{
        // Рисуем линиии на мувике mcLines черным цветом с прозрачностью 50% и минимальной толщиной
        drawLines(mcLines, 0x000000, 50, 0);               
};

В результате на основной сцене создавался контрол СкролПане и в нем рисовались линии, но полос прокруток небыло, хотя линии уходили за область (это точно).

Теоретически, чтобы решить проблему, необходимо вызвать метод redraw у компонента скролПане после прорисовки. Правильно было бы использовать событие complete того же скролПане. Однако оно (событие) не срабатывает. Вот код который я добавил в таймлайн основной сцены для обработки события:
Код:

var cspCompleteListener:Object = new Object();
cspCompleteListener.complete = function() {
        trace("Загрузка завершена.");                // Это сообщение не появляется
};
csp.addEventListener("complete", cspCompleteListener);

тогда я изменил содержимое скрипта в таймлайн mcEmpt в событии doc.onLoad:
Код:

        ...
        // Рисуем линиии на мувике mcLines черным цветом с прозрачностью 50% и минимальной толщиной
        ...
        mcLines._parent.redraw(true);        // Или mcLines._parent._parent.redraw(true); если mcLines через this.createEmptyMovieClip
        ...

после этого прорисовываются скролы и можно смотреть все содержимое.

Вопрос знатокам: почему может не работать событие complete?

Annihilator 20.12.2006 19:08

Вот, нашёл на флеш-потрошителе такую уловку:
Код:

scrollPane.content._yscale = 1000; // Изменяем размер контента
scrollPane.doLater(scrollPane, "size"); // Заставляем компонент отреагировать на изменение размера контента

Только все равно я не пойму, как обращаться к клипу, который внутри scrollpane? (обидно, да - упорно приучал себя к централизации кода, а тут опять приходится внутрь клипа пихать:mad: )

ЗЫ. Я нашел хорошую замену этому компоненту, может поможете его под AS2 переделать?


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

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