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

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

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

Регистрация: Oct 2013
Сообщений: 23
По умолчанию Stage и preloader

Я начинающий, не судите строго.
Есть игра. При нажатии кнопки в главном меню запускается сам игровой процесс. Нужно было осуществить управление клавиатурой. Единственным рабочим способом оказался такой:
Код AS3:
/*Обработчик нажатие кнопки начала игры*/
function gsConnect(event:Event){
addChild(_game);}
/*конструктор класса _game*/
function Game() {
. . . . 
this.addEventListener(Event.ADDED, _test);
. . . .
}
/*Ф-я добавление слушателей клавиатуры*/
function _test(event:Event){
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, reportKeyUp);
stage.addEventListener(Event.ENTER_FRAME,Movement);}
Я, честно говоря, довольствовался бы и подобным костылём. НО решил я, значит, добавить прелоадер, который ничем особенным не отличается.
[spoiler]
Код AS3:
package  {
	import flash.display.*;
	import flash.events.*;
	import flash.text.TextField;
	import flash.net.URLRequest;
 
	public class Preloader extends Sprite {
		var progress_tf:TextField = new TextField();
		var loader:Loader = new Loader();
 
		public function Preloader() {
			var loader_url='http://.... .swf';
 
         	progress_tf.x=530/2;
         	progress_tf.y=380/2;
         	addChild(progress_tf);
 
         	var loadURL:URLRequest=new URLRequest(loader_url);
 
         	loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onLoadProgress);// прогресс загрузки
         	loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplete);// загружено
        	loader.load(loadURL);
		}
		function onLoadProgress(evt:ProgressEvent):void {
            progress_tf.text = String(Math.round(100*(evt.bytesLoaded/evt.bytesTotal)))+"%";
		}
		function onLoadComplete(evt:Event):void {
            removeChild(progress_tf);
            addChild(loader);
         }
 
	}
 
}
[/spoiler]
И что вы думаете, естественно, stage теперь не фокусируется на классе Game(имхо), и не реагирует на нажатие клавиш. Не прошу решить проблему за меня. Хотел бы услышать объяснение почему таковая возникает, либо почувствовать пинок в максимально конкретезированном направлении её решения.

Старый 29.01.2014, 06:34
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 2  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Должно работать, но как вариант:
Код AS3:
this.addEventListener(Event.ADDED, _test);
Event.ADDED -> Event.ADDED_TO_STAGE

Ну и вцелом не оч красивый прелоадер получился. Лучше посмотреть на шаблон, который по-умолчанию создает FleshDevelop.
__________________
Кто к нам с чем для чего - тот у нас того от того.

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

Регистрация: Oct 2013
Сообщений: 23
Dukobpa3, примного благодарю за отклик.
Цитата:
Ну и вцелом не оч красивый прелоадер получился.
Прелоадер пока только для тестирования, рисоваться будет отдельно позже.(Просто "тестеры" уже достали вопросом "а чё это у меня белый экран?").

Касательно сути вопроса вот в чем оказалась загвоздка. Я работаю в честно спизженном купленном Adobe Flash CS6. Не знаю как в FD, но в adobe в параметрах публикации есть такой пункт как "безопасность при локальном воспроизведении". Тестировал я прелоадер через вк(всеми я, так понимаю, "любимый"), и это выдавало результат описанный в теме. И ТУТ Я РЕШИЛ(ВНЕЗАПНО) поменять параметр публикации на "Только по сети", и естественно всё пошло по накатанной. Остался вопрос почему, хоть и от части, но оно работало до этого, и почему именно так.

Добавлено через 1 час 19 минут
Ошибка, как выяснилось, заключалась и продолжает заключаться в том, что на созданный экземпляр класса Game не переходит фокус, т.е. пока те тыкнешь по сцене мышкой — никакой реакции на клавиши. Пробовал
Код AS3:
stage.focus = this;
, при локальном тестировании работает и без, а Вконтакте всё также.

Добавлено через 2 часа 26 минут
Тему можно закрывать
Решение оказалось в итоге в дважды проще чем думалось. Фокус теряло само приложение. Всё прекрасно работает, если строчку
Код AS3:
stage.focus = this;
изменить на
Код AS3:
stage.focus = stage;


Последний раз редактировалось Всеволод; 29.01.2014 в 09:33. Причина: очепятка
Старый 29.01.2014, 12:57
myakushka вне форума Посмотреть профиль Отправить личное сообщение для myakushka Найти все сообщения от myakushka
  № 4  
Ответить с цитированием
myakushka

Регистрация: Jan 2014
Адрес: Россия, Саратов
Сообщений: 28
Интересно почему приложение теряло фокус...

Старый 29.01.2014, 14:44
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Интересно почему приложение теряло фокус...
Это Магия!
__________________
Марк Tween

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

Теги
AS3 , preloader , stage , stage.addEventListener
Опции темы
Опции просмотра

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

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


 


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


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