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

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

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

Регистрация: Jul 2010
Сообщений: 99
if (imagesLoaded < IMAGES_PER_PAGE)
А почему не в цикле for ?

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

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

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

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

Добавлено через 25 минут
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Не делайте так никогда. Этот вопрос задавали очень много раз - в поиск.
http://www.flasher.ru/forum/showthre...E1%FB%F2%E8%FF
http://www.flasher.ru/forum/showthre...E1%FB%F2%E8%FF
например.
И таких тем еще сотни были.
Прочитал всё. Применил к моему коду - не работает.
Может выложить весь мой код целиком? (он небольшой)
Просто в первом посте я упростил код.

Добавлено через 4 часа 56 минут
http://www.flasher.ru/forum/showthread.php?t=136030
Использовал идею с

Цитата:
хотя почему бы для obj не указать дополнительное свойство. Например:
тогда по-идее в test_msg можно его вытащить:
Код AS3:
obj.msg = 'test message';
obj.addEventListener(MouseEvent.CLICK,test_msg);
 
function test_msg(e:Event){
	trace(e.target.msg);
}
Я сделал свой класс
Код AS3:
package
{
	import flash.display.Loader;
 
	public class Myloader extends Loader
	{
		public var server:String;
 
		public function Myloader()
		{
			super();
		}
	}
}
 
//в основном коде
var myloader:Myloader = new Myloader();
myloader.server = 'server1';
myloader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadAva);
myloader.load(new URLRequest(image_url));
 
// функция onLoadAva
//из-за этой строчки не работает. если её закомментировать, то картинки показывает.
tf.text=e.target.server;
Сижу ночами, не могу сделать. Ужас просто.

Добавлено через 5 часов 34 минуты
Продолжаю не спать и бороться с проблемой.
Сделал как сказано тут http://www.flasher.ru/forum/showpost...09&postcount=3
Цитата:
лучше через слушатель ничего не передавать, это не совсем правильно, но можно либо колбек сделать анонимный или внутри колбека поместить еще одну функцию и ей уже передавать эвент, но это все не есть правильно
Сделал так:
Код AS3:
function onLoadAva(e:Event, s:String) : void
{
tmp_mc.image_url = s;
 
tmp_mc.addEventListener(MouseEvent.CLICK, 
function (e:Event):void 
{
e.target.x+=50;
tf.text = tmp_mc.image_url;
});
}
 
//Поиск фотографий
service.addEventListener(FlickrResultEvent.PHOTOS_SEARCH, onPhotosSearch);
service.photos.search("", "linux", "any", "", null, null, null, null, 0, "", 3, 1, "date-posted-desc");
 
function onPhotosSearch(e:FlickrResultEvent):void {
for (var i:Number = 0; i <= e.data.photos.photos.length-1; i++)
{
var server:String =  e.data.photos.photos[i].server;
var id:String =  e.data.photos.photos[i].id;
var secret:String = e.data.photos.photos[i].secret;
var image_url:String = "http://static.flickr.com/"+server+"/"+id+"_"+secret+"_s.jpg";
tf.text += server + ", ";					
var loader:Loader = new Loader();
//loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadAva);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
function (e:Event):void{onLoadAva(e, server)}
);
loader.load(new URLRequest(image_url));
};
}
Результат: работает, но не так как надо. Нужно допиливать напильником.
Да, при клике по картинке, в текстовом поле отображается значение переменной s.
Но это отображаемое значение одно и то же, а оно должно быть разным.
Ведь в функции onPhotosSearch переменная server принимает разные значения.
И вызов function (e:Event):void{onLoadAva(e, server)} тут ведь тоже каждый вызов значение
переменной server разное. Но в текстовом поле одно и то же.

tf.text += server + ", "; в текстовом поле появилось testsdfwefwef4116, 4119, 4120,
Когда кликаешь по любой картинке, то в тектовом поле появляется строка 4120.
А ведь должно как быть: кликаешь по первой картинке, в текстовом поле появляется строка 4116,
кликашь по второй картинке, в тектовом поле появляется строка 4119,
кликашь по третьей картинке, в тектовом поле появляется строка 4120.
А сейчас кликаешь по первой, второй и третьей картинкам - всё равно появляется строка 4120.

Кстати, у Вас может возникнуть вопрос: почему после 4116 сразу 4119, а не 4117?
Всё нормально, это flickr такие адреса задаёт.

Добавлено через 9 часов 41 минуту
Закомментировал строку tf.text += server + ", "; в функции onPhotosSearch
Добавил строку tf.text += s + ", "; в функцию onLoadAva(e:Event, s:String)
В текстовом поле появилось testsdfwefwef4139, 4139, 4139,
Получается, что в функцию onLoadAva каждый раз передаётся одно и то же число.
Странно, ведь вызов onLoadAva производится с разным значением переменной server.

Добавлено через 9 часов 41 минуту
Я спать, всю ночь работал.

Добавлено через 22 часа 24 минуты
Проснулся. Заново посмотрел код, кажется я понял почему всё равно появляется строка 4120.
В функции onPhotosSearch есть цикл, он итерируется быстро, а событие
Event.COMPLETE происходит уже потом, после завершения цикла (ведь фотки грузятся не так быстро, как итерируется цикл).
А после завершения цикла переменная server равна 4120 и поэтому
функция onLoadAva(e, server) вызывается с одним и тем же значением переменной server.
Я прав?


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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Никогда не используйте анонимные функции в AS3. Только что же в соседнем разделе это обсуждалось...
А вообще, поищите в форуме "API приложений и сред", там наверняка есть варианты с flickr. Ну или в худшем случае, в сети таких должно быть масса, я бы начал с http://www.adobe.com/devnet/ там публиковались куча примеров пто фейсбуки, твиттер, и им подобные.
__________________
Hell is the possibility of sanity

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

Регистрация: Jul 2010
Сообщений: 99
wvxvw, спасибо, что отвечаете на мои вопросы. Хоть что-то становится понятно.
Да тут дело то в общем не с фликр, на его месте мог быть любой сайт.
С фликр api у меня всё хорошо.

Старый 13.07.2010, 09:32
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 16  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Я передаю параметры в обработчик с помощью Dictionary, у которого Loader.contentLoaderInfo/URLLoader - ключи.
Код AS3:
public var dict:Dictionary = new Dictionary(true);
public function load(url:String, callback:Function, param:*):void{
  var loader:Loader loader= new Loader();
  loader.load(new URLRequest(url));
  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadImage, false, 0, true);
  dict[loader.contentLoaderInfo] = [callback, param];
}
public function onLoadImage(e:event):void{
  e.target.removeEventListener(Event.COMPLETE, onLoadImage);
  dict[e.target][0](e, dict[e.target][1]);
}
как-то так
Кстати, с MyLoader вариант по идее не хуже, а может и чуть получше, но правильно не
tf.text=e.target.server;
а
tf.text = (e.target.loader as MyLoader).server;
т.к. e.target - это contentLoaderInfo. Ещё то, что вы не увидели ексепшен, кидаемый строкой tf.text=e.target.server; (оно совсем не просто так берёт и не работает) означает, что у вас не дебаговый плеер, рекомендуется вот поставить.
PS: код выше не компилился, доработать напильником, если чо =)


Последний раз редактировалось -De-; 13.07.2010 в 11:04.
Старый 15.07.2010, 04:38
zemozes вне форума Посмотреть профиль Отправить личное сообщение для zemozes Найти все сообщения от zemozes
  № 17  
Ответить с цитированием
zemozes
 
Аватар для zemozes

Регистрация: Jul 2010
Сообщений: 99
Сделал как сказал wvxvw, помогло.
http://www.flasher.ru/forum/showpost...4&postcount=10

Проблему с передачей параметров решил просто: глобальный массив.

Создать новую тему Ответ Часовой пояс 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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.