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

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

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

Регистрация: Mar 2008
Сообщений: 33
По умолчанию Советы начинающим: Прелоадер. Подгрузка SWF файла. Изменение вида курсора.

Здравствуйте!

Крайне необходимы ваши советы и где-то, конечно, помощь.
Как начинающий, думаю мне не имеет особого смысла начинать изучать старые версии ActionScript . Но неприятность, как вы и без меня знаете, заключается в том, что для новой третьей версии достаточно мало примеров и туториалов, как в общем и литературы, что нельзя сказать про предыдущие версии(для последних в нэте примеров тонны, выбирай – не хочу). Если для людей бывалых, это не составляет особой проблемы, то для новичков, а в особенности, кто до этого вообще практически программированием не занимался, это является весомым препятствием для скорейшего усвоения материала. Как студенту, мне данный момент особенно критичен.
Поэтому прошу вашего содействия, т.к. темы которые я хотел бы поднять(поиск тщательно использовался, не говоря уже о таком же изучении ФАКа с правилами), по моему скромному мнению, достаточно начального уровня и как мне кажется не займут много вашего внимания и будут крайне полезными как для меня, так и для других новичков.
Ну, начнём по пунктам:

1)Прелоадер.

По примеру( http://flasher.ru/forum/showthread.p...147#post535147 ) в факе сделал прелоадер. Но имеется неприятная проблема, а точнее две. Первая. Показ SWFмувика, который усердно подгружал прелоадер, начинается не с первого, а с того кадра , как если отнять время предзагрузки от общего время демонстрации SWFролика. То есть, проще говоря, такое ощущение, что мувик начинает проигрывание во время работы прелоадера. А когда предзагрузка заканчивается, отображается только оставшееся время проигрывания. Вот линк с примером( http://www.zone-rouge.net/pln/01.html ), который наглядно покажет, что я имею в виду.
После первой загрузки отобразится только последняя секунда-две ролика. А если потом обновить страницу, то уже из кэша ролик подгрузится сразу и проигрывание будет корректным. Подскажите, что необходимо добавить в код чтобы убрать данную засаду?
И вторая засада. В самом начале, ещё до появления загрузчика, появляется белый кадр на пол секунды, максимум одну. От чего зависит это? Без прелоадера такого белого кадра не наблюдается, но и ролик «тупит», т.к. до конца не загрузился.
SWFка представляет из себя простое чередование растровых изображений.
Вот линк на все исходники. http://www.zone-rouge.net/pln/test.rar
А ниже сам код прелоадера. Отличия от примера минимальны, но думаю всё же лучше скопировать его сюда.

Код:
package {
	import flash.display.Sprite; 
	import flash.display.Loader; 
	import flash.display.LoaderInfo; 
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFieldAutoSize; 
	import flash.net.URLRequest; 
	import flash.events.Event;
	import flash.events.ProgressEvent; 
	
	public class Test extends Sprite {
		private var loader:Loader = new Loader();
		private var loadStatus:TextField = new TextField();
		private var textformat:TextFormat = new TextFormat;
		private var request:URLRequest = new URLRequest("mc01.swf");
		
		public function Test() {
			loader.load(request);					loader.contentLoaderInfo.addEventListener(Event.OPEN,displayPreloader);				loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,updatePreloader);		loader.contentLoaderInfo.addEventListener(Event.COMPLETE,displayImage);
		} 
			private function displayPreloader(evt:Event):void {
			loadStatus.autoSize = TextFieldAutoSize.LEFT;
			addChild(loadStatus);
			
		}
		
		private function updatePreloader(evt:ProgressEvent):void {
			
			loadStatus.text = "loaded:"+evt.bytesLoaded+" from "+evt.bytesTotal;
			loadStatus.x = 250;
			loadStatus.y = 150;
			textformat.font = "Helvetica";
			textformat.color = 0xFF0000;
			textformat.size = 24;
			loadStatus.setTextFormat(textformat);
			
			
			
		}
		
		private function displayImage(evt:Event):void {
			removeChild(loadStatus);
			addChild(loader);
		}		
	}
}


2)Подгрузка SWF файла

Есть необходимость по окончании проигрывания SWFфайла о котором шла речь выше, подгрузить(отобразить) другой SWFфайл(меню сайта с кнопками и тому подобное), при этом выгрузить первый.


3)Изменение вида курсора.

В моём случае хочется сделать курсор следующего вида. Две перпендикулярных пересекающиеся(разумеется под прямым углом) линии, начинающиеся от сторон периметра объекта и пересекаются в месте предполагаемого курсора. При перемещении курсора, координаты их пересечения соответственно изменяются. Т.е. пересечение это и будет являться индикатором курсора, вертикальная линия перемещается по горизонтали, а горизонтальная, соответственно, по вертикали. А объект представляет из себя либо область отображения(stage), либо мувиклип неправленой формы размером чуть меньше области отображения, в случае с мивиклипом, линии, разумеется, не должны выходить за его периметр. Но если курсор выходит за пределы периметра, то он становится обычной мышиной стрелкой, а пересечение линий бы оставалось в том месте внутри периметра, где в последний раз находился курсор и как только курсор возвращается в периметр он обратно становится интерактивным пересечением линий. Конечно, хочется увидеть примеры кода для обоих случаев, как для мувика так и для всего стейджа. Приведу наглядный пример: мувиклип представляет из себя видоискатель бинокля овальной формы, как в играх. Когда в него видна цель, она фиксируется на видоискателе двумя пересекающимися линиями. В нашем случае цель, - это курсор.

Я надеюсь, объяснения мои были предельно ясны и благодарю за уделённое этой теме внимание.

Буду крайне признателен, за любую помощь.

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

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

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Цитата:
Сообщение от wolas Посмотреть сообщение
Здравствуйте!
...
Но неприятность, как вы и без меня знаете, заключается в том, что для новой третьей версии достаточно мало примеров и туториалов, как в общем и литературы, что нельзя сказать про предыдущие версии(для последних в нэте примеров тонны, выбирай – не хочу).
...
Здравствуйте!

Это враньё.
Если английский совсем не знаете, то прочтите "важные"
темы в разделе в который запостили.
http://www.flasher.ru/forum/showthread.php?t=85645
Если знаете то спросите у гугла (AS3 tutorials)

Старый 19.05.2008, 19:38
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 3  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Соглясен с terbooter. Примеров много посетите сайт например
http://www.flashandmath.com
Там афигенные фишки от простейших слайд шоу и других не слайд, но тоже шоу, до трехмерных навроченных меню с использованием стандартной комплектации AS3 все с исходниками.
Это еще без учета того, что есть еще
http://www.kirupa.com
Где в разделе AS3 немеряно всего.

Старый 19.05.2008, 22:06
wolas вне форума Посмотреть профиль Отправить личное сообщение для wolas Найти все сообщения от wolas
  № 4  
Ответить с цитированием
wolas

Регистрация: Mar 2008
Сообщений: 33
terbooter Спасибо за ссылку, но я там уже бывал и конкретных примеров не видел, но, тем не менее, она у меня в избранных в любом случае и думаю в скором времени понадобится ни один раз. А вот за гугль - вдвойне спасибо! А именно за пример поискового запроса. Он оказался белее удачным, хотя и очень похож на мои. Искал по-разному, по-всякому.
В общем спасибо за ответ.

Alex Lexcuk Спасибо большое за ссылки! Полезные сайты. Обычным макаром, я бы ещё, наверное, нескоро бы на них наткнулся.

To All
Но всё же осмелюсь ещё раз спросить про первый пункт(прелоадер), в чем там может быть проблема?

А так в целом, вроде разобрался. Но чувствую всякими уточнениями ещё не раз вас потревожу.

Старый 20.05.2008, 04:07
ulik вне форума Посмотреть профиль Отправить личное сообщение для ulik Посетить домашнюю страницу ulik Найти все сообщения от ulik
  № 5  
Ответить с цитированием
ulik
 
Аватар для ulik

Регистрация: Apr 2007
Адрес: Moscow city
Сообщений: 286
Отправить сообщение для ulik с помощью ICQ
Цитата:
показ SWFмувика, который усердно подгружал прелоадер, начинается не с первого, а с того кадра , как если отнять время предзагрузки от общего время демонстрации SWFролика
В этом и есть плюс FP - "стрим" подгрузка. Все просто: по дефолту (если нет stop() на линейке) стоит play(). Вам нужно во внешнем swf сделать stop() на первом кадре, а в прелоадере в ф-ии onCompleteHandler - event.target.play();
__________________
Дизайн, как презерватив - каждому жмет по-своему © Я
мое: блог форум


Последний раз редактировалось ulik; 20.05.2008 в 12:56.
Старый 20.05.2008, 16:56
wolas вне форума Посмотреть профиль Отправить личное сообщение для wolas Найти все сообщения от wolas
  № 6  
Ответить с цитированием
wolas

Регистрация: Mar 2008
Сообщений: 33
ulik Спасибо за сообщение!

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

Попытался сделать как вы сказали:

Добавил нужный класс

Код:
import fl.motion.Animator;
затем в функцию onCompleteHandler(в данном примере насколько я понимаю она называется displayImage)
вставил всё как вы сказали:
Код:
event.target.play();
но выдаётся следующая ошибка

Error #1069: Property play not found on flash.display.LoaderInfo and there is no default value.
at Test02/::displayImage()


Очень похоже на результаты моих предыдущих попыток(если я, конечно, правильно истолковываю смысл ошибки). Пытался запустить ролик после загрузки, но скрипт его не находил(или я плохо его обозначал). Так на этом всём и кончилось и я решил написать сюда.

Старый 20.05.2008, 17:55
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 7  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
LoaderInfo, а вам нужен Loader.content

Старый 20.05.2008, 18:53
wolas вне форума Посмотреть профиль Отправить личное сообщение для wolas Найти все сообщения от wolas
  № 8  
Ответить с цитированием
wolas

Регистрация: Mar 2008
Сообщений: 33
Psycho Tiger

так?

Код:
loader.Loader.content.addEventListener(Event.COMPLETE,onCompleteHandler);
private function onCompleteHandler(event:Event):void
		{
			event.target.play();
		}

на это выдаётся следуещее:

1119: Access of possibly undefined property Loader through a reference with static type flash.display:Loader.


ещё пробовал изменить вот так:

Код:
loader.content.addEventListener(Event.COMPLETE,onCompleteHandler);
Результат:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Test02$iinit()

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

Регистрация: Mar 2008
Сообщений: 33
Итого, такого вида код

Код:
package {
	//импортируем нужные нам классы
	import flash.display.Sprite; // это базовый класс для нашего root'а
	import fl.motion.Animator;
	import flash.display.Loader; // в экземпляр данного класса будем грузить картинку
	import flash.display.LoaderInfo; // из экземпляра данного класса, будем брать информацию
	import flash.text.TextField;
	import flash.text.TextFormat;// в текстовом поле, будем отображать процесс загрузки
	import flash.text.TextFieldAutoSize; // тут константы вариантов значения свойства textField.autoSize
	import flash.net.URLRequest; // экземпляр данного класса, будет хранить в себе адресс картинки
	import flash.events.Event; // это событие
	import flash.events.ProgressEvent; 
	
	public class Test02 extends Sprite {
		//создаем экземпляр Loader
		private var loader:Loader = new Loader();
		//создаем экземпляр TextField
		private var loadStatus:TextField = new TextField();
		//создаем экземпляр URLReques
		private var request:URLRequest = new URLRequest("swf011.swf");
		
		private var myFormat:TextFormat = new TextFormat();


		// конструктор
		public function Test02() {
			//Начинаем загрузку
			loader.load(request);
			// подписываем обработчики события
			loader.contentLoaderInfo.addEventListener(Event.OPEN,displayPreloader);
			loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,updatePreloader);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,displayImage);
			loader.Loader.content.addEventListener(Event.COMPLETE,onCompleteHandler);
		} 
		//наши обработчики событий
		private function displayPreloader(event:Event):void {
			//добавляем текствое поле
			loadStatus.autoSize = TextFieldAutoSize.LEFT;
			addChild(loadStatus);
			myFormat.font = "Helvetica";
			myFormat.color = 0xFF0000;
			myFormat.size = 24;
			loadStatus.setTextFormat(myFormat);
			loadStatus.x = 300;
			loadStatus.y = 150;
		}
		
		private function updatePreloader(event:ProgressEvent):void {
			//изменяем информацию в процессе загрузки
			loadStatus.text = "loaded:"+event.bytesLoaded+" from "+event.bytesTotal;
			myFormat.font = "Helvetica";
			myFormat.color = 0xFF0000;
			myFormat.size = 24;
			loadStatus.setTextFormat(myFormat);
			loadStatus.x = 300;
			loadStatus.y = 150;
			
		}
		
		private function displayImage(event:Event):void {
			//удаляем текстовое поле, и добавляем само изображение
			removeChild(loadStatus);
			addChild(loader);
			
		}		
		
		private function onCompleteHandler(event:Event):void
		{
			event.target.play();
		}
		
	}
	
}

Старый 20.05.2008, 19:09
max_oil вне форума Посмотреть профиль Отправить личное сообщение для max_oil Найти все сообщения от max_oil
  № 10  
Ответить с цитированием
max_oil

Регистрация: Mar 2008
Сообщений: 57
Код:
loader.addEventListener(Event.COMPLETE,onCompleteHandler);
......................................
private function onCompleteHandler(event:Event):void
{
	var mc:MovieClip = event.target as MovieClip;
        mc.play();
}
Попробуйте так, а вобще старайтесь в дальнейшем локализовывать проблему, а то прочитывать весь код нет никакого желания..


Последний раз редактировалось max_oil; 20.05.2008 в 19:16.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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