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

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

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

Регистрация: Jul 2010
Сообщений: 99
По умолчанию Передать параметры в обработчик события

Передать параметры в обработчик события.
Скрипт грузит небольшие фотки (75*75, миниатюры) с сайта, как только фотка загрузилась,
то создаётся bmpd: BitmapData, в нём рисуется фотка,
потом содаётся var bmp:Bitmap=new Bitmap(bmpd) и tmp_mc:MovieClip.
Далее tmp_mc становится слушателем события MouseEvent.CLICK
и когда оно наступает, то сдвигается вправо (и он сдвигается).
После этого код tmp_mc.addChild(bmp) этим я добавляю фотку к мувиклипу.
Далее addChild(tmp_mc) чтобы мувик был виден.

Такие образом: один мувик это одна фотка.
Сайт хранит одну фотку в разных разрешениях.
Короче на экране пользователь увидит миниатюры фоток,
кликнув по которым откроется фотка в более высоком разрешении.
Нужно чтобы при клике мышью по мувику, в центре экрана создавалось поле,
в него загружалась фотка более высокого разрешения.
Для этого надо чтобы при создании мувика ему было присвоено свойство
tmp_mc.image_url = "http://site.ru/image_big_4.jpg" (четыре это номер фотки).
Вот как раз передать строку image_url в обработчик события неполучается.

Код AS3:
var tf:TextField = new TextField();
tf.x = 100;
tf.y = 10;
tf.autoSize = "left";
tf.text = "testsdfwefwef";
addChild(tf);
 
var q:Number = 0;
 
function onLoadAva(e:Event) : void
			{
//var loaderInfo:LoaderInfo = e.target as LoaderInfo;
//var dispObj:DisplayObject = loaderInfo.content;
var bmpd:BitmapData = new BitmapData (e.target.content.width, e.target.content.height,false);
bmpd.draw(e.target.content,null,null,null,null,true);
var bmp:Bitmap=new Bitmap(bmpd);
bmp.width=75;bmp.height=75;
bmp.smoothing=true;
bmp.pixelSnapping = PixelSnapping.ALWAYS;
tf.text = String(e.target.content);
var tmp_mc:MovieClip = new MovieClip();
tmp_mc.addEventListener(MouseEvent.CLICK, 
						function (e:Event):void 
						{
							e.target.x+=50;
							tf.text = tmp_mc.x.toString();
							/*var canvas:Sprite = new Sprite();
							canvas.graphics.lineStyle(5, 0xFFD700, 1, false, LineScaleMode.VERTICAL,
								CapsStyle.NONE, JointStyle.MITER, 10);
							canvas.graphics.moveTo(e.target.x, e.target.y);
							canvas.graphics.lineTo(e.target.width, e.target.y);
							addChild(canvas);*/
						});
				tmp_mc.addChild(bmp);
				tmp_mc.x = 100*q;
				tmp_mc.y = 40;
				tmp_mc.width=75;tmp_mc.height=75;
				//tmp_mc.scaleX=0.75;tmp_mc.scaleY=0.75;
				tmp_mc.graphics.lineStyle(1, 0x000000, 1);
				tmp_mc.graphics.lineTo(tmp_mc.width, 0);
				tmp_mc.graphics.lineTo(tmp_mc.width, tmp_mc.height);
				tmp_mc.graphics.lineTo(0, tmp_mc.height);
				tmp_mc.graphics.lineTo(0, 0);
				addChild(tmp_mc);
				q = q+1;
				//tf.text = "q="+q+"\r";
			}
 
 
		for (var i:Number = 0; i <= 10; i++)
{
				var image_url:String = "http://site.ru/image_big_"+i+".jpg";
				var loader:Loader = new Loader();
				loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadAva);
				loader.load(new URLRequest(image_url));
};


Последний раз редактировалось zemozes; 11.07.2010 в 07:52.
Старый 11.07.2010, 11:52
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Не делайте так никогда. Этот вопрос задавали очень много раз - в поиск.
http://www.flasher.ru/forum/showthre...E1%FB%F2%E8%FF
http://www.flasher.ru/forum/showthre...E1%FB%F2%E8%FF
например.
И таких тем еще сотни были.
__________________
Hell is the possibility of sanity

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

Регистрация: Jul 2010
Сообщений: 99
Поиском то я искал. LOLEvent не заработал, выдаёт ошибку.
http://www.flasher.ru/forum/showpost...9&postcount=11

Добавлено через 7 минут
Есть ещё одно решение, оно "как бы" не через задний проход.
создать функцию, которая потом будет вызывать нужную уже с параметрами, и вписать её в ивент лисенер.
http://www.flasher.ru/forum/showpost...0&postcount=11

это тоже не помогло

Добавлено через 16 минут
Сделал другим способом. Работает.

Код AS3:
var loaderInfo:LoaderInfo = e.target as LoaderInfo;
tmp_mc.image_url = loaderInfo.url;
Добавлено через 22 минуты
Но это не то, ведь loaderInfo.url это встроенная переменная.
А мне нужно передавать свои переменные.

Добавлено через 1 час 0 минут
Пробую сделать свой класс на основе loader - одни ошибки.


Последний раз редактировалось zemozes; 11.07.2010 в 21:54.
Старый 11.07.2010, 22:50
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Что такое встроенная переменная?
Не вижу ничего плохого в вызове другой функции.
Пока что через задний проход написан только код в первом сообщении.
__________________
Hell is the possibility of sanity

Старый 11.07.2010, 23:02
zemozes вне форума Посмотреть профиль Отправить личное сообщение для zemozes Найти все сообщения от zemozes
  № 5  
Ответить с цитированием
zemozes
 
Аватар для zemozes

Регистрация: Jul 2010
Сообщений: 99
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Что такое встроенная переменная?
Не вижу ничего плохого в вызове другой функции.
Пока что через задний проход написан только код в первом сообщении.
>>>Что такое встроенная переменная?
Я имел ввиду переменная, объявленная в классе LoaderInfo

>>>Не вижу ничего плохого в вызове другой функции.
Я тоже ничего плохого в этом не вижу, пробовал так делать, не работает.

>>>Пока что через задний проход написан только код в первом сообщении
А что в нём не так?

Добавлено через 36 минут
Сделал класс Myloader на основе Loader, теперь работает.
С дополнительным полем public var server:String;
Код AS3:
package
{
	import flash.display.Loader;
 
	public class Myloader extends Loader
	{
		public var server:String;
 
		public function Myloader()
		{
			super();
		}
	}
}
Использую его так
Код AS3:
import Myloader;
var myloader:Myloader = new Myloader();
myloader.server = server;
myloader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadAva);
myloader.load(new URLRequest(image_url));
Картинки загружает, но в функции onLoadAva пробую узнать значение свойства server
tmp_mc.image_url = e.target.server; и в этом случае картинки не показываются.
А если закомментировать строку tmp_mc.image_url = e.target.server;, то картинки показываются.

Старый 12.07.2010, 00:03
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Потому что должно было быть примерно так:
Код AS3:
import flash.display.Graphics;
const SITE_URL:String = "http://site.ru/image_big_";
const IMAGES_PER_PAGE:int = 10;
 
var field:TextField = new TextField();
field.x = 100;
field.y = 10;
field.autoSize = TextFieldAutoSize.LEFT;
field.text = "testsdfwefwef";
this.addChild(field);
 
var counter:int;
var imagesLoaded:int;
 
function completeHandler(event:Event):void
{
	var info:LoaderInfo = event.target as LoaderInfo;
	var bitmap:Bitmap = info.loader.content as Bitmap;
	var bmpd:BitmapData = bitmap.bitmapData.clone();
	var loader:Loader;
 
	var clone:Bitmap = new Bitmap(bmpd);
	clone.width = 75;
	clone.height = 75;
	clone.smoothing = true;
	clone.pixelSnapping = PixelSnapping.ALWAYS;
	field.text = String(bitmap);
 
	var container:MovieClip = new MovieClip();
	container.addEventListener(MouseEvent.CLICK, this.clickHandler);
	container.addChild(clone);
	container.x = 100 * counter;
	container.y = 40;
	container.width = 75;
	container.height = 75;
	var canvas:Graphics = container.graphics;
	canvas.lineStyle(1, 0, 1);
	canvas.drawRect(0, 0, container.width, container.height);
	this.addChild(container);
	counter++;
 
	if (imagesLoaded < IMAGES_PER_PAGE)
	{
		loader = new Loader();
		loader.contentLoaderInfo.addEventListener(
			Event.COMPLETE, this.completeHandler);
		loader.load(new URLRequest(SITE_URL + imagesLoaded + ".jpg"));
		imagesLoaded++;
	}
}
 
function clickHandler(event:Event):void 
{
	var clicked:DisplayObject = event.target as DisplayObject;
	if (clicked)
	{
		clicked.x += 50;
		field.text = clicked.x.toString();
	}
}
Если не вдаваться в подробности.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 12.07.2010 в 00:06.
Старый 12.07.2010, 00:19
zemozes вне форума Посмотреть профиль Отправить личное сообщение для zemozes Найти все сообщения от zemozes
  № 7  
Ответить с цитированием
zemozes
 
Аватар для zemozes

Регистрация: Jul 2010
Сообщений: 99
Какое событие передавать обработчику completeHandler?
Или просто completeHandler(null) ?

Старый 12.07.2010, 00:20
Nirth вне форума Посмотреть профиль Отправить личное сообщение для Nirth Посетить домашнюю страницу Nirth Найти все сообщения от Nirth
  № 8  
Ответить с цитированием
Nirth
4AM Games
 
Аватар для Nirth

блогер
Регистрация: Nov 2002
Адрес: Sofia
Сообщений: 6,264
Записей в блоге: 1
Отправить сообщение для Nirth с помощью ICQ Отправить сообщение для Nirth с помощью AIM Отправить сообщение для Nirth с помощью MSN Отправить сообщение для Nirth с помощью Yahoo Отправить сообщение для Nirth с помощью Skype™
Код AS3:
loader.contentLoaderInfo.addEventListener(
			Event.COMPLETE, this.completeHandler);
completeHandler вызовут сами, когда надо
__________________
Я перестал переписывать, начал редактировать, еще лет 15 и я стану писателем ^_^

Старый 12.07.2010, 00:22
zemozes вне форума Посмотреть профиль Отправить личное сообщение для zemozes Найти все сообщения от zemozes
  № 9  
Ответить с цитированием
zemozes
 
Аватар для zemozes

Регистрация: Jul 2010
Сообщений: 99
Цитата:
Сообщение от Nirth Посмотреть сообщение
Код AS3:
loader.contentLoaderInfo.addEventListener(
			Event.COMPLETE, this.completeHandler);
completeHandler вызовут сами, когда надо
Кто вызовет?

Старый 12.07.2010, 00:24
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Тогда так:
Код AS3:
const SITE_URL:String = "http://site.ru/image_big_";
const IMAGES_PER_PAGE:int = 10;
 
var field:TextField = new TextField();
this.field.x = 100;
this.field.y = 10;
this.field.autoSize = TextFieldAutoSize.LEFT;
this.field.text = "testsdfwefwef";
this.addChild(this.field);
 
var counter:int;
var imagesLoaded:int;
 
function completeHandler(event:Event):void
{
	var info:LoaderInfo = event.target as LoaderInfo;
	var bitmap:Bitmap = info.loader.content as Bitmap;
	var bmpd:BitmapData = bitmap.bitmapData.clone();
 
	var clone:Bitmap = new Bitmap(bmpd);
	clone.width = 75;
	clone.height = 75;
	clone.smoothing = true;
	clone.pixelSnapping = PixelSnapping.ALWAYS;
	this.field.text = String(bitmap);
 
	var container:MovieClip = new MovieClip();
	container.addEventListener(MouseEvent.CLICK, this.clickHandler);
	container.addChild(clone);
	container.x = 100 * this.counter;
	container.y = 40;
	container.width = 75;
	container.height = 75;
 
	var canvas:Graphics = container.graphics;
	canvas.lineStyle(1, 0, 1);
	canvas.drawRect(0, 0, container.width, container.height);
	this.addChild(container);
	this.counter++;
 
	if (imagesLoaded < IMAGES_PER_PAGE) this.loadNext();
}
 
function loadNext():void
{
	var loader:Loader = new Loader();
	loader.contentLoaderInfo.addEventListener(
		Event.COMPLETE, this.completeHandler);
	loader.load(new URLRequest(SITE_URL + this.imagesLoaded + ".jpg"));
	this.imagesLoaded++;
}
 
function clickHandler(event:Event):void 
{
	var clicked:DisplayObject = event.target as DisplayObject;
	if (clicked)
	{
		clicked.x += 50;
		this.field.text = clicked.x.toString();
	}
}
__________________
Hell is the possibility of sanity

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

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

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


 


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


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