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

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

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

Регистрация: Jun 2010
Сообщений: 30
По умолчанию Последующая загрузка фото в спрайт

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

Кто поможет, отблагодарю на всю жизнь!))

Вот исходник: http://www.varyag207.ru/load_foto.rar

Старый 04.07.2011, 22:42
Vier вне форума Посмотреть профиль Отправить личное сообщение для Vier Посетить домашнюю страницу Vier Найти все сообщения от Vier
  № 2  
Ответить с цитированием
Vier

Регистрация: Sep 2004
Сообщений: 90
У вас ошибка в том, что foto1_Sprite ресайзится только первый раз, далее он не трогается, и берутся первый раз установленные размеры. В ресайз передавайте параметры от реальной bmp.
Ну и убивайте добавленных child'ов.

P.s. ресайз делайте лучше как-то так:
Код AS3:
if(img.width > stageW || img.height > stageH) {
    var sc:Number = Math.min(stageW/img.width,stageH/img.height);
    img.scaleX *= sc;
    img.scaleY *= sc;
}


Последний раз редактировалось Vier; 04.07.2011 в 22:54.
Старый 05.07.2011, 10:52
geka96 вне форума Посмотреть профиль Отправить личное сообщение для geka96 Найти все сообщения от geka96
  № 3  
Ответить с цитированием
geka96

Регистрация: Jun 2010
Сообщений: 30
Дружище, спасибо тебе большое!!!) Сам бы не догадался))

Добавлено через 1 час 51 минуту
Vier, не подскажешь ещё одну вещь...когда удаляю Child'ы, то при 4-ом удалении, новый bitmap накладывается на старый не очищенный...

P.S. с компа фото загружаются нормально, а с нета вот так...при 4 удалении накладывается...что это может быть?


Последний раз редактировалось geka96; 05.07.2011 в 13:34.
Старый 05.07.2011, 15:11
Vier вне форума Посмотреть профиль Отправить личное сообщение для Vier Посетить домашнюю страницу Vier Найти все сообщения от Vier
  № 4  
Ответить с цитированием
Vier

Регистрация: Sep 2004
Сообщений: 90
Покажи код, как удаляешь. И как загружаешь по сети. А вообще, есть такая волшебная вещь, как дебагер )

Старый 05.07.2011, 15:54
geka96 вне форума Посмотреть профиль Отправить личное сообщение для geka96 Найти все сообщения от geka96
  № 5  
Ответить с цитированием
geka96

Регистрация: Jun 2010
Сообщений: 30
Вот собрал исходник с проблемой: http://www.varyag207.ru/load_problem.rar

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

Старый 05.07.2011, 16:02
Vier вне форума Посмотреть профиль Отправить личное сообщение для Vier Посетить домашнюю страницу Vier Найти все сообщения от Vier
  № 6  
Ответить с цитированием
Vier

Регистрация: Sep 2004
Сообщений: 90
Честно говоря, скачивать fla неудобно и под рукой нет адобовских программ. Выложи текст скрипта сюда, все будет понятно.

Старый 05.07.2011, 16:16
geka96 вне форума Посмотреть профиль Отправить личное сообщение для geka96 Найти все сообщения от geka96
  № 7  
Ответить с цитированием
geka96

Регистрация: Jun 2010
Сообщений: 30
Понятно..) Вот код:
Код AS3:
var fileRef:FileReference;
var pLoader:Loader;
var resizeObject = {w:350,h:280};
var textTypeFilter:FileFilter;
var foto1_Sprite:Sprite=new Sprite();
var foto2_Sprite:Sprite=new Sprite();
var bmp:Bitmap;
var bmp2:Bitmap;
pLoader=new Loader();
 
addChild(foto1_Sprite);
addChild(foto2_Sprite);
 
eshe.visible = false;
 
fileRef=new FileReference();
textTypeFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)","*.jpg;*.jpeg;*.gif;*.png");
fileRef.addEventListener(Event.SELECT, onFileSelected);
selectBTN.addEventListener("mouseDown",selectFotoPressedHandler);
function onFileSelected(evt:Event):void
{
	fileRef.addEventListener(Event.COMPLETE, onComplete);
	fileRef.load();
}
function onComplete(evt:Event):void
{
	pLoader.contentLoaderInfo.addEventListener(Event.INIT,imageInited);
	pLoader.loadBytes(fileRef.data);
}
function imageInited(evt:Event):void
{
	var myBitmapData:BitmapData = new BitmapData(pLoader.width,pLoader.height);
 
	myBitmapData.draw(pLoader);
 
	bmp = new Bitmap(myBitmapData);
	bmp2 = new Bitmap(myBitmapData);
 
	foto1_Sprite.addChild(bmp);
	foto2_Sprite.addChild(bmp2);
	// запуск ресайза;
	resizePicture();
}
 
function selectFotoPressedHandler(e:Event)
{
	fileRef.browse([textTypeFilter]);
}
 
function resizePicture()
{
	trace("Ресайз!");
	if (bmp2.width > resizeObject.w || bmp2.height > resizeObject.h)
	{
		var sc:Number = Math.min(resizeObject.w / bmp2.width,resizeObject.h / bmp2.height);
		bmp2.scaleX *=  sc;
		bmp2.scaleY *=  sc;
 
		// ресайз копии
		foto1_Sprite.width = foto2_Sprite.width = bmp2.width;
		foto1_Sprite.height = foto2_Sprite.height = bmp2.height;
	}
 
	foto1_Sprite.x = foto2_Sprite.x;
	foto1_Sprite.y = foto2_Sprite.y;
 
	selectBTN.visible = false;
	loadAva.visible = false;
	eshe.visible = true;
}
 
//Загрузить фото из сети
var lc:LoaderContext;
loadAva.addEventListener(MouseEvent.CLICK,onClickLoadAva);
function onClickLoadAva(e:Event):void
{
	lc = new LoaderContext(true);
	pLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageInited);
	pLoader.load( new URLRequest("http://cs1495.vkontakte.ru/u00001/a_04766c4c.jpg"), lc );
}
 
//Загрузить фото ещё раз с компа
eshe.addEventListener(MouseEvent.CLICK,onClickEshe);
function onClickEshe(e:Event):void
{
	loadAva.visible = true;
	selectBTN.visible = true;
	eshe.visible = false;
 
	//Удалить фото
	foto1_Sprite.removeChild(bmp);
	foto2_Sprite.removeChild(bmp2);
}
Заранее спасибо)

Старый 05.07.2011, 17:34
Vier вне форума Посмотреть профиль Отправить личное сообщение для Vier Посетить домашнюю страницу Vier Найти все сообщения от Vier
  № 8  
Ответить с цитированием
Vier

Регистрация: Sep 2004
Сообщений: 90
Я не понял в чем тайный смысл создания копии. И скейлить нужно либо bmp, либо foto1_Sprite. Обнулять контейнер после загрузки. Как-то так:

Код AS3:
function imageInited(evt:Event):void {
 
	var myBitmapData:BitmapData = new BitmapData(pLoader.width,pLoader.height);
	myBitmapData.draw(pLoader); 
	bmp = new Bitmap(myBitmapData);
 
	// запуск ресайза;
	resizePicture(bmp.width, bmp.height);
 
        while(foto1_Sprite.numChildren>0) {
             foto1_Sprite.removeChildAt(0);
        }
 
	foto1_Sprite.addChild(bmp);
}
 
function resizePicture(myWid:int, myHeight:int):void {
 
	trace("Ресайз!");
	if (myWid > resizeObject.w ||  myHeight > resizeObject.h)
	{
		var sc:Number = Math.min(resizeObject.w/myWid,resizeObject.h/myHeight);
		foto1_Sprite.scaleX *=  sc;
		foto1_Sprite.scaleY *=  sc;
 
	}
 
	selectBTN.visible = false;
	loadAva.visible = false;
	eshe.visible = true;
}

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

Регистрация: Jun 2010
Сообщений: 30
Vier, спасибо Вам огромнейшее!)) У самого даже в мыслях не было, что так можно обнулить контейнер..теперь буду знать!)) Ещё раз спасибо! Очень помогли!))

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

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

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


 


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


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