Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Раздвижные блоки (http://www.flasher.ru/forum/showthread.php?t=162445)

Drac0Sha 12.08.2011 14:40

возможно
Код AS3:

removeChild(blocksContainer);

не в том месте!? )

Добавлено через 1 час 16 минут
Код AS3:

while (blocksContainer.numChildren)
                        {
                        blocksContainer.removeChildAt(0);
                        _blocksArray.splice(0,1)
                        }
                        removeChild(blocksContainer);

пробовал...работает, убирает...но почему-то глючит...очень сильно...
то есть...первый клик на другую кнопку работает
второй нет...
пока другую не нажму.
такое ощущение, что блокирует всё.

Wolsh 12.08.2011 16:03

Я уже говорил - я не телепат. Я ничего не понимаю, что вы хотите получить. Я не понимаю термины, вроде "переход на другую кнопку", "все блокируется", "убирается сначала". Попробуйте описать без троеточий.

2Sun 12.08.2011 16:21

Цитата:

первый клик на другую кнопку работает
второй нет...
пока другую не нажму.
Вы-ж ее два раза, судя по вашим словам, нажимаете!!! Попробуйте нажать другую кнопку!
Правда ничего не понятно? Нам тоже.

Drac0Sha 15.08.2011 11:44

Извините за непонятные объяснения.
ну есть приложение. в нём несколько (для точности 3 возьмём) кнопки. 1.)кнопка вызов профиля.2.)кнопка вызов контейнера 1. 3.)кнопка вызов другого контейнера 2.

так вот, при нажатии на кнопку 2.) появляется контейнер 1.
и мне надо сделать так,чтобы при нажатии на кнопку 3) контейнер 1 исчезал, а контейнер 2 появлялся. а при нажатии на кноку 1.) любой из контйнеров исчезал.

надеюсь, так более понятно

2Sun 15.08.2011 12:47

Цитата:

Сообщение от Drac0Sha (Сообщение 1020843)

пробовал...работает, убирает...но почему-то глючит...очень сильно...
то есть...первый клик на другую кнопку работает
второй нет...
пока другую не нажму.
такое ощущение, что блокирует всё.

А вот можно это - только в терминах = кнопка №1 , кнопка№2, кнопка№3?
По логике - нужно правильно назначить действия для каждой кнопки.
Для одной из них - удаление контейнера и добавление другого.
для второй - тоже- только наоборот.
для третьей - удаление обоих контейнеров (именно так - оба, только проверку на присутствие на сцене не забудьте сделать)

Drac0Sha 15.08.2011 13:14

кнопка №1-вызов профиля
кнопка №2-вызов контейнера 1
кнопка №3- вызов контейнера 2
кнопка №4-вызов чужого профиля
изначально загружается приложение.
и я сделал так, чтобы контейнер (контейнер3) на главной был, то есть сразу при входе.
дальше нажимаю на кнопку №1
убирается контейнер и сцена. всё отлично работает.
нажимаю на кнопку №2
контейнер 1 накладывается на контейнер 3. сразу оба видно.
нажимаю на кнопку №4
опять же всё отлично работает. показывает то что нужно, убирает контейнер.
а если после этого нажать на кнопку №1
не появляется ничего. как будто это не кнопка.
насколько я понял
кнопка №1, кнопка №4 происходит так, что он проверяет есть ли контейнер, и если есть удаляет.
а вот если нет, он вообще ничего не делает.
то есть две проблемы.
1.как сделать так чтобы кнопка №1, кнопка №4 работали (и без контейнера)
2.как сделать так чтобы не накладывались друг на друга сами контейнеры, то есть выводились тогда когда нужно, тот что нужен.

надеюсь, более менее внятно написал )

Добавлено через 2 часа 26 минут
по 1 пункту я разобрался, тупанул, просто добавил контейнер в сцену.
scene.addChild(blocksContainer)
по 2 не понятно, как убрать наложение.


может быть использовать маску!? я просто вообще не разбираюсь...помогите

Добавлено через 26 часов 28 минут
вопрос решил )
тупанул просто )
создал второе событие на клик )

Drac0Sha 18.08.2011 16:03

Код AS3:

private function dataCompleteHandler(event:Event):void 
                {
                        var data:XML = new XML( (event.currentTarget as URLLoader).data );
                        var parties:XMLList = data.party;
                        //var blocksContainer:Sprite = new Sprite();
                        scene.addChild(blocksContainer);
 
                        blocksContainer.x = blocksContainer.y = 130;
 
                        var blockHeight:Number = 0;
 
                        for (var i:uint = 0; i < parties.length(); i++)
                        {
                                var block:InfoBlock = new InfoBlock(parties[i]);
                                var btn_voice : voice = new voice();
 
                                //btn_voice.x=200;
                                btn_voice.y=blockHeight;
                                //blockHeight += btn_voice.height + 1;
                                btn_voice.addEventListener(MouseEvent.CLICK, profiles);
 
                                block.y = blockHeight;
                                blockHeight += block.height + 1;
                                block.addEventListener(MouseEvent.CLICK, infoBlockClickHandler);
                                blocksContainer.addChild(block);
                                blocksContainer.addChild(btn_voice);
 
                                _blocksArray.push(block);
                        }
 
                }
 
                private function infoBlockClickHandler(event:MouseEvent):void
                {
 
                        var blockC:InfoBlock = event.currentTarget as InfoBlock;
                        blockC.hiden = !blockC.hiden;
 
                        var blockHeight:Number = 0;
 
                        for (var i:uint = 0; i < _blocksArray.length; i++)
                        {
                                var block:InfoBlock = _blocksArray[i];
                                if (block !== blockC)
                                {
                                        if (!block.hiden) block.hiden = true;
                                }
                                block.y = blockHeight;
                                blockHeight += block.height + 1;
                        }
                }

Здравствуйте снова.
У меня получилось вставить кнопку в раздвижные блоки.
Однако не получается, так чтобы при нажатии на сам блок (он раздвигается), а кнопки остаются на месте.
Хочется, чтобы кнопка так же меняла координаты.
Подскажите, пожалуйста, как это сделать!? )
(btn_voice)

kaploson 18.08.2011 17:00

Вы уверены что нужно исправлять не в InfoBlock??

Drac0Sha 19.08.2011 14:06

ну насколько я понимаю, мне надо что-то исправить в InfoBlockCkickHandler, надеюсь, на вашу помощь, господа )

2Sun 19.08.2011 15:25

Код AS3:

blocksContainer.addChild(block);
block.addChild(btn_voice);


Wolsh 19.08.2011 22:39

Эта кнопка - часть раздвижного блока или всего контейнера с несколькими раздвижными блоками?
В блоке тем, что показывается, управляет режим - свернутый или развернутый. Если кнопка - часть блока, то и добавляться в список/удаляться из списка отображения она должна при смене режима показа блока, а никак не извне. Посмотрите, как сделано с текстовым полем. Точно так же и кнопка.

Drac0Sha 22.08.2011 10:03

Да, она реализуется также как и текстовое поле. просто, я не понимаю, как из InfoBlock.as, ведь кнопка там находится и при нажатии она указывает на функцию из Main.as. Помогите пожалуйста, как это можно реализовать.


получилось кнопки вставить. проблем нет.
другая проблема появилась
как сделать так, чтобы при нажатии на кнопку в вызываемую функцию из xml таблицы передавалось значение.
допустим, вот этот блок, есть кнопка в определённом из блоков. допустим их 5 раздвижных блоков. при нажатии на 3 блок, в функцию передавалось, что это именно 3 блок!?

Wolsh 22.08.2011 12:46

Надо завести какой-то идентификатор.. У Вас я так понимаю есть XML в Мейне, и блоки показывают узлы этого XML. Надо определить при нажатии, какой это блок и какой узел XML ему соответствует. Это один вариант. Другой – блок ведь "знает" весь нужный узел, можно просто определить блок как Event#currentTarget, и получить от него весь узел, за который он отвечает. То есть не искать этот узел в полном XML в Мейне, а взять его прямо из блока. Для этого в блоке сделать соответствующий геттер, возвращающий тот узел, который был передан блоку при инициализации.
Так понятно или нужен готовый код? Если нужен, то уточните, на что нужна реакция то – на нажатие на сам блок или всетаки на кнопку в блоке?)

Drac0Sha 22.08.2011 13:02

Есть XML вида :
Код:

<data>
        <part>
                <id>10</id>
                <name>ИМЯ1</name>
                <date>22.09.2011</date>
        </part>
        <part>
                <id>24</id>
                <name>ИМЯ2</name>
                <date>22.09.2011</date>
        </part>
....
        <part>
                <id>32</id>
                <name>ИМЯN</name>
                <date>22.09.2011</date>
        </part>
</data>

Кнопка находится в блоке. В функции dataCompleteHadler c кодом:
Код AS3:

private function dataCompleteHandler(event:Event):void 
 
 
                        var data:XML = new XML( (event.currentTarget as URLLoader).data );
                        var parties:XMLList = data.part;
                        scene.addChild(blocksContainer);
 
                        blocksContainer.x = 10;
                        blocksContainer.y = 130;
 
                        var blockHeight:Number = 0;
                        for (var i:uint = 0; i < parties.length(); i++)
                        {
 
                                var block:InfoBlock = new InfoBlock(parties[i]);
                                var btn_tools : tools = new tools()//описание кода кнопки
                                block.y = blockHeight;
                                blockHeight += block.height + 1;
                                btn_tools.y = 15; btn_tools.x = 540;
 
                                btn_tools.addEventListener(MouseEvent.CLICK,ClickHand);
                                block.addEventListener(MouseEvent.CLICK, infoBlockClickHandler);
                                blocksContainer.addChild(block);
                                block.addChild(btn_tools);
                                _blocksArray.push(block);
                        }
 
                }

Нужно сделать, чтобы по нажатию на кнопку btn_tools которая находится в каждом блоке вызывалась функция ClickHand и в эту функцию передавался
id из XML файла, причем этот id того блока в котором находится кнопка.

Код функции CLickHand
Код AS3:

private function ClickHand(e:Event) : void 
                {
 
 
 
                        var stat_loader:URLLoader = new URLLoader();
            var stat_request:URLRequest=new URLRequest("http://сайт/click.php");// заменяем на ссылку к вашему скрипту
            stat_request.method=URLRequestMethod.POST;
            // добавление параметров в запрос
            var stat_vars:URLVariables = new URLVariables();
            stat_vars['auth_key']=auth_key;
            stat_vars['viewer_id']=viewer_id;
            stat_vars['uid'] =_info..id;          // Непонятно, правильно это или нет , что сделать??
                        stat_loader.addEventListener(Event.COMPLETE,print);
            stat_request.data=stat_vars;
            // выполнение запроса
            stat_loader.load(stat_request);               
 
                }

Если убрать строчку
Код AS3:

 stat_vars['uid'] = _info..id;

, то запрос к скрипту отправляется и отправляются viewer_id и auth_key, но эта строчка
очень важная...
Тоесть не получается передать в эту функцию параметр id из XML файла и сделать, чтобы при нажатии на кнопку блок не расширялся..
Помогите пожалуйста, желательно кодом, а то я уже все перепробовал..

Добавлено через 5 часов 49 минут
ещё попробовал
Код AS3:

private function ClickHand(id:uint) : void

но передаёт лишь 0.
видимо надо так же как и parties сделать из него массив, зависящий от i.
но как!?

или я не правильно думаю!?

Wolsh 22.08.2011 20:40

Вложений: 1
Я, уж извините, на своем примере дописал

Drac0Sha 23.08.2011 11:33

СПАСИБО ОГРОМНОЕ все отлично работает!!!
Только можно еще пару вопросиков:
1.Я изменил infoblock, чтобы кнопка всегда была в закрытом состоянии, но заметил, что первое нажатие на кнопку открывает блок, а только второе вызывает функцию
как можно сделать так чтобы, при первом нажатии вызывалась функция и блок не открывался при нажатии на кнопку
вот infoblock.as:
Код AS3:

package  
{
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.text.TextField;
        import flash.text.TextFormat;
            import flash.events.TextEvent;
 
/* * * * * * * * * *
*                  *
*  @author wolsh  *
*                  *
\* * * * * * * * * */

        public class InfoBlock extends Sprite
        {
                static public const BLOCK_BUTTON_CLICKED:String = "blockButtonClicked";
                private var _info:XML;
                private var _mode:uint = 0;
                private var _backgroundColor:uint = 0x000000;
                private var _backgroundAlpha:Number = 0.24;
                private var _blockWidth:Number = 400;
                private var _date:IconLabel;
                private var _name:IconLabel;
                private var _title:IconLabel;
                private var _text:TextField;
                private var _labelFormat:TextFormat = new TextFormat("Arial", 11, 0x000000);
                private var _textFormat:TextFormat = new TextFormat("Arial", 12, 0x000000);
                private var _hiden:Boolean = true;
                private var btn_tools : tools = new tools();
 
                public function InfoBlock(info:XML)
                {
                        _info = info;
                        prepare();
                        setMode(0);
                        drawBack();
                }
 
                private function prepare():void
                {
 
                        _date  = new IconLabel(new Bitmap(new _dateIcon()),  _info..date, _labelFormat);
                        _name  = new IconLabel(new Bitmap(new _userIcon()),  _info..user, _labelFormat);
                        _title = new IconLabel(new Bitmap(new _titleIcon()), _info..title, _labelFormat);
 
                        this.addChild(_date); _date.x = 10, _date.y = 10;
                        this.addChild(_name); _name.x = 10, _name.y = 30;
                        this.addChild(_title); _title.x = 10, _title.y = 50;
                        this.addChild(btn_tools); btn_tools.x = 450; btn_tools.y = 25;                       
 
                        _text = new TextField();
                        _text.defaultTextFormat = _textFormat;
                        _text.multiline = true;
                        _text.wordWrap = true;
                        _text.width = _blockWidth - 20;
                        _text.htmlText = _info..message.text();
 
 
 
                        _text.height = _text.textHeight + 4;
 
 
                }
 
                private function setMode(mode:uint):void
                {
                        if (mode == _mode) return;
                        if (mode == 0)
                        {
                                this.removeChild(_text);
 
                        }
                        else
                        {
                                this.addChild(_text);
                                _text.x = 10, _text.y = 70;
 
                                btn_tools.addEventListener(MouseEvent.CLICK, buttonClickHandler);
 
 
                        }
                        _mode = mode;
                        drawBack();
                }
 
                private function buttonClickHandler(event:MouseEvent):void
                {
                        event.stopImmediatePropagation();
                        dispatchEvent(new Event(BLOCK_BUTTON_CLICKED));
                }
 
                private function drawBack():void
                {
                        this.graphics.clear();
                        this.graphics.beginFill(_backgroundColor, _backgroundAlpha);
                        this.graphics.drawRoundRect(0, 0, _blockWidth, this.height + 20, 12);
                }
 
                public function get hiden():Boolean
                {
                        return _hiden;
                }
 
                public function set hiden(value:Boolean):void
                {
                        _hiden = value;
                        setMode(_hiden ? 0 : 1);
                }
 
                public function get info():XML
                {
                        return _info;
                }
 
        }
 
 
}

И второй вопросик, если я хочу создать еще 2 кнопки, которые будут вызывать другие функции.

необходимо их также объявить как btn_tools и сделать
Код AS3:

        btn_one.addEventListener(MouseEvent.CLICK, buttonClickHandler_one);
        btn_two.addEventListener(MouseEvent.CLICK, buttonClickHandler_two);
 
        private function buttonClickHandler_two(event:MouseEvent):void
                {
                        event.stopImmediatePropagation();
                        dispatchEvent(new Event(BLOCK_BUTTON_CLICKED_TWO));
                }
        private function buttonClickHandler_one(event:MouseEvent):void
                {
                        event.stopImmediatePropagation();
                        dispatchEvent(new Event(BLOCK_BUTTON_CLICKED_ONE));
                }

и вызов в Maine в dataCompleteHandler
Код AS3:

block.addEventListener(InfoBlock.BLOCK_BUTTON_CLICKED_ONE, blockButtonClickedHandler_one);
block.addEventListener(InfoBlock.BLOCK_BUTTON_CLICKED_TWo, blockButtonClickedHandler_two);

нО при таком коде кнопка будет вызывать сразу несколько функций..А не каждая кнопка свою..


а и еще предположим у меня XML файл вида:
Код:

<data>
        <topic>
                <date>02.08.2011 12:42</date>
                <user>Дмитрий</user>
                <age>18</age>
                <title>Нужна помощь!</title>
                <message>Изучаю флэш, но пока что плохо получается...</message>
                      <friends>
                <friend>Сергей</friend>
                  <friend>Олег</friend>
                      </friends>
         
        </topic>
</data>

Как мне вывести на экран (т.е. в _text.htmlText) Сергей и Олег? которые в <friends>

toFL 23.08.2011 12:03

Цитата:

Как мне вывести на экран (т.е. в _text.htmlText) Сергей и Олег? которые в <friends>
Код AS3:

trace(xml.topic.friends.friend[0]);//Сергей
trace(xml.topic.friends.friend[1]);//Олег

P.S. Это вопрос о работе с XML в ActionScript, а не о "раздвижных блоках". Как требуют модераторы:
Цитата:

Один вопрос - одна тема.

Drac0Sha 23.08.2011 12:47

ну это просто находится в раздвижных блоках. я думаю, многим людям понадобится эта информация.

toFL, как вы предложили не подойдёт, так как
Мне нужно вывести наподобие _text.htmlText = _info..message.text();
то есть чтобы их обоих вывести нужно использовать цикл?

попробовал ещё так, как раз цикл
Код AS3:

var friends_number:XMLList = _info.friends;
for (var i:uint = 0; i < friends_number.length(); i++)
{
 _text.htmlText += _info..friends.friend[i] + \n' + _info..date
  }

выводит только одного...первого.

исправил )
дописать надо было лишь
Код AS3:

var friends_number:XMLList = _info.friends.friend;

правда, выводит в столбик, а надо в строчку. не знаете, в чем может быть проблема!?

toFL 23.08.2011 13:16

Цитата:

правда, выводит в столбик, а надо в строчку. не знаете, в чем может быть проблема!?
Код:

\n
- символ следующей строки

И еще: я настоятельно рекомендую Вам, перед вопросом, попытаться, хотя бы попытаться, решить проблему самому.

Drac0Sha 23.08.2011 13:23

Я знаю, что \n - символ следующей строки, но и без него выдает в столбик _text.htmlText += _info..friends.friend[i] ;
Я просто забыл стереть перед тем как написать

toFL 23.08.2011 13:34

Код AS3:

_text.htmlText += _info..friends.friend[i].toString();


Wolsh 23.08.2011 13:55

1. Строчку btn_tools.addEventListener(MouseEvent.CLICK, buttonClickHandler); надо было перенести туда, где добавляете btn_tools в контейнер блока, в prepare(). Сейчас у Вас кнопка есть, но слушатель на нее не добавлен, соответственно при первом нажатии выполняется обработчик не кнопки, а всего блока.
2.
Цитата:

нО при таком коде кнопка будет вызывать сразу несколько функций..А не каждая кнопка свою..
Почему это? Вся цепочка же идет с индивидуальным идентификатором (_2, _3). В самом инфоБлоке можно и не городить несколько обработчиков-редиспатчеров, а просто определять, какую именно кнопку нажали и диспатчить наружу соответствующее событие. C какой стати в Мейне сработает обработчик другого события?
3. У Вас же перенос строки стоит - \n, потому и в столбик))

Добавлено через 1 минуту
опоздал((

Drac0Sha 23.08.2011 15:05

Цитата:

2.
Цитата:
нО при таком коде кнопка будет вызывать сразу несколько функций..А не каждая кнопка свою..
Почему это? Вся цепочка же идет с индивидуальным идентификатором (_2, _3). В самом инфоБлоке можно и не городить несколько обработчиков-редиспатчеров, а просто определять, какую именно кнопку нажали и диспатчить наружу соответствующее событие. C какой стати в Мейне сработает обработчик другого события?
Описал как говорите
Код AS3:

private function prepare():void
  {
this.addChild(btn_no);  btn_no.y=15; btn_no.x = 500;
this.addChild(btn_tools); btn_tools.y = 15; btn_tools.x = 540;
btn_no.addEventListener(MouseEvent.CLICK, buttonClickHandler_no);
btn_tools.addEventListener(MouseEvent.CLICK,buttonClickHandler_tools);
 
}
 
 
 
private function buttonClickHandler_no(event:MouseEvent):void
  {
  event.stopImmediatePropagation();
  dispatchEvent(new Event(BLOCK_BUTTON_CLICKED_NO));
  }
private function buttonClickHandler_tools(event:MouseEvent):void
  {
  event.stopImmediatePropagation();
  dispatchEvent(new Event(BLOCK_BUTTON_CLICKED_TOOLS));
  }

В Meine dataCOmpleteHadler:

Код AS3:

 
//...
 
{
block.y = blockHeight;
blockHeight += block.height + 1;
block.addEventListener(MouseEvent.CLICK, infoBlockClickHandler);
block.addEventListener(InfoBlock.BLOCK_BUTTON_CLICKED_NO,testing_one);
block.addEventListener(InfoBlock.BLOCK_BUTTON_CLICKED_TOOLS,testing_two);
blocksContainer.addChild(block);
_blocksArray.push(block);
}

при нажатии одно из двух кнопок вызываются обе функции и testing_one и testing_two.Причем все равно какую кнопку нажать..Все равно
будут вызываться обе функции.

Код AS3:

for (var i:uint = 0; i < friends_number.length(); i++)
  {
      _text.htmlText += _info..friends.friend[i].toString();
  }

Все равно в столбик выводит)

Wolsh 23.08.2011 16:15

Это через другую кнопку всплывает событие клика от самого блока, и, хоть и останавливается кнопкой, но кнопка диспатчит свое событие, как будто кликнули ее. Надо поставить проверку такого вида
Код AS3:

private function buttonClickHandler_no(event:MouseEvent):void 
{
  event.stopImmediatePropagation();
  if (event.target == btn_no)
  {
      dispatchEvent(new Event(BLOCK_BUTTON_CLICKED_NO) );
  }
}

И, как я уже говорил, такой обработчик можно сделать один для всех кнопок, нагородив в нем if'ов или поставив switch. Не очень кошерно, но для постоянного кол-ва кнопок сойдет.

Добавлено через 40 минут
Код AS3:

_text.htmlText += ( _info..friend.toString() ).replace(/[\n\r]+/, ", ");


Wolsh 23.08.2011 17:21

Вложений: 1
Вот как-то так.

Drac0Sha 23.08.2011 18:17

Спасибо большое ! очень помогли ! отличный форум !

Drac0Sha 24.08.2011 12:32

Вложений: 1
Здравстуйте еще раз ) Опять возникло два вопросика.В data.xml у меня были поля :
Код:

...
<friends>
<friend> Дмитрий </friend>
<friend> Олег </friend>
</friends>
...

Я попытался сделать их ссылками. НО я заметил, что
1)они становятся ссылками, но идут в столбик, как можно сделать в строчку ? или это невозможно?
2)Я пытаюсь сделать, чтобы при нажатии например на "Дмитрий" функция через trace отобразила "Дмитрий", но не понимаю как можно передать ей id того на кого я нажал.
просто при функции trace ( block.info.friends.friend) результат будет:
Код:

<friend> Дмитрий </friend>
<friend> Олег </friend>

Поэтому логично было бы делать trace ( block.info.friends.friend[i]); ,но как передать i ?

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

Wolsh 24.08.2011 13:37

Вложений: 1
Чтож, пришлось таки вернуться к первоначальной идее с редиспатчем события CLICK. То есть Мейн теперь не слушает мышиных кликов по блоку, блок сам сообщает ему, что был кликнут)

Drac0Sha 25.08.2011 11:35

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

Wolsh 25.08.2011 15:04

А при чем здесь текстовое поле то? Не понял логики. Как Вы собираетесь "выводить в него блоки" и как это решит проблему скроллинга?
Раньше был такой компонент, наверное есть и сейчас - ScrollArea, попробуйте его. Ну или пишите свой скроллер/используйте компонент ScrollBar. Для контейнера можно определить свойство scrollRect и подключить какой-нибудь механизм скроллирования, какой Вам нравится - скроллбар или кнопки "перемотки" сверху и снизу, перемотка колесиком мышки. В любом случае, думаю, это отдельная тема. Возникнет главная проблема - изменяющийся размер контента, требующий пересчета скроллера.

Drac0Sha 25.08.2011 16:20

спасибо большое ) буду стараться ) если что ещё напишу, в призывах о помощи )

in4core 25.08.2011 17:17

Код AS3:

for(var i=0;scene.numChildren!=0;)

Ого это как так?

Drac0Sha 29.08.2011 13:22

Wolsh
Ещё раз здравствуйте )
все выходные сидел, пытался, совсем с рук сбился.
пытался и с маской, и просто ScrollRect
и насколько я понял последнее и быстрее и эффективнее, и для контейнера самый лучший подход
хотел призвать о помощи, а то совсем...уж (
Правильно ли я объявляю, и вызываю функцию для скролла
ошибок не выдаёт, но ничего и не работает (((
Код AS3:

private function dataCompleteHandler(event:Event):void 
                {
                        var data:XML = new XML( (event.currentTarget as URLLoader).data );
                        var parties:XMLList = data.party;
                        scene.addChild(blocksContainer);
 
                        blocksContainer.x = 10;
                        blocksContainer.y = 130;
 
                        var circle:Sprite = new Sprite();
                        circle.graphics.beginFill(0xFFCC00);
                        circle.graphics.drawCircle(200, 200, 200);
                        circle.scrollRect = new Rectangle(0, 0, 200, 200);
                        this.addChild(circle);
                        circle.addEventListener(MouseEvent.CLICK, clicked);
 
                        var blockHeight:Number = 0;
                        for (var i:uint = 0; i < parties.length(); i++)
                        {
                                var block:InfoBlock = new InfoBlock(parties[i]);
                                block.y = blockHeight;
                                blockHeight += block.height + 1;
                                block.addEventListener(MouseEvent.CLICK, infoBlockClickHandler);
                                blocksContainer.addChild(block);
                                _blocksArray.push(block);
 
 
                        }
 
                }
 
                public function clicked(event:MouseEvent):void
                {
            var rect:Rectangle = event.target.scrollRect;
                    rect.y -= 5;
            event.target.scrollRect = rect;
                }


in4core
а что не так!?



P.S.
пытался с механизмом прокрутки, то есть сбоку скроллинг, интересно, а это подразумевает ещё и прокрутку колёсиком мышки.

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

Добавлено через 25 часов 16 минут
ребят!!! помогите пожалуйста ) !

Добавлено через 45 часов 16 минут
кому интересно, тема перешла сюда http://www.flasher.ru/forum/showthread.php?t=166131 !


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

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