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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.08.2011, 22:39
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 51  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Эта кнопка - часть раздвижного блока или всего контейнера с несколькими раздвижными блоками?
В блоке тем, что показывается, управляет режим - свернутый или развернутый. Если кнопка - часть блока, то и добавляться в список/удаляться из списка отображения она должна при смене режима показа блока, а никак не извне. Посмотрите, как сделано с текстовым полем. Точно так же и кнопка.
__________________
Reality.getBounds(this);

Старый 22.08.2011, 10:03
Drac0Sha вне форума Посмотреть профиль Отправить личное сообщение для Drac0Sha Найти все сообщения от Drac0Sha
  № 52  
Ответить с цитированием
Drac0Sha

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


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


Последний раз редактировалось Drac0Sha; 22.08.2011 в 12:01.
Старый 22.08.2011, 12:46
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 53  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Надо завести какой-то идентификатор.. У Вас я так понимаю есть XML в Мейне, и блоки показывают узлы этого XML. Надо определить при нажатии, какой это блок и какой узел XML ему соответствует. Это один вариант. Другой – блок ведь "знает" весь нужный узел, можно просто определить блок как Event#currentTarget, и получить от него весь узел, за который он отвечает. То есть не искать этот узел в полном XML в Мейне, а взять его прямо из блока. Для этого в блоке сделать соответствующий геттер, возвращающий тот узел, который был передан блоку при инициализации.
Так понятно или нужен готовый код? Если нужен, то уточните, на что нужна реакция то – на нажатие на сам блок или всетаки на кнопку в блоке?)
__________________
Reality.getBounds(this);

Старый 22.08.2011, 13:02
Drac0Sha вне форума Посмотреть профиль Отправить личное сообщение для Drac0Sha Найти все сообщения от Drac0Sha
  № 54  
Ответить с цитированием
Drac0Sha

Регистрация: Aug 2011
Сообщений: 50
Есть 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.
но как!?

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

Старый 22.08.2011, 20:40
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 55  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Я, уж извините, на своем примере дописал
Вложения
Тип файла: zip InfoBlocks2_CS5.zip (16.0 Кб, 17 просмотров)
__________________
Reality.getBounds(this);

Старый 23.08.2011, 11:33
Drac0Sha вне форума Посмотреть профиль Отправить личное сообщение для Drac0Sha Найти все сообщения от Drac0Sha
  № 56  
Ответить с цитированием
Drac0Sha

Регистрация: Aug 2011
Сообщений: 50
СПАСИБО ОГРОМНОЕ все отлично работает!!!
Только можно еще пару вопросиков:
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>


Последний раз редактировалось Drac0Sha; 23.08.2011 в 11:54.
Старый 23.08.2011, 12:03
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 57  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Цитата:
Как мне вывести на экран (т.е. в _text.htmlText) Сергей и Олег? которые в <friends>
Код AS3:
trace(xml.topic.friends.friend[0]);//Сергей
trace(xml.topic.friends.friend[1]);//Олег
P.S. Это вопрос о работе с XML в ActionScript, а не о "раздвижных блоках". Как требуют модераторы:
Цитата:
Один вопрос - одна тема.

Старый 23.08.2011, 12:47
Drac0Sha вне форума Посмотреть профиль Отправить личное сообщение для Drac0Sha Найти все сообщения от Drac0Sha
  № 58  
Ответить с цитированием
Drac0Sha

Регистрация: Aug 2011
Сообщений: 50
ну это просто находится в раздвижных блоках. я думаю, многим людям понадобится эта информация.

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;
правда, выводит в столбик, а надо в строчку. не знаете, в чем может быть проблема!?


Последний раз редактировалось Drac0Sha; 23.08.2011 в 12:56.
Старый 23.08.2011, 13:16
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 59  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Цитата:
правда, выводит в столбик, а надо в строчку. не знаете, в чем может быть проблема!?
Код:
\n
- символ следующей строки

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

Старый 23.08.2011, 13:23
Drac0Sha вне форума Посмотреть профиль Отправить личное сообщение для Drac0Sha Найти все сообщения от Drac0Sha
  № 60  
Ответить с цитированием
Drac0Sha

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:07.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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