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

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

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

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
По умолчанию Добавить экземпляр класса в Main

Ух, осуществилась мечта, начал изучать AS3... Идея проста - перенести свою игру-сайт во флеш... И, так сказать, уже появились проблемы... Изначально был такой вариант:
Вот класс Main:
Код AS3:
package
{
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLRequest;
	import flash.text.TextField;
	import vk.APIConnection;
	import vk.api.serialization.json.JSON;
 
	/**
	 * ...
	 * @author Volodin Alexandr Sergeevich
	 */
	public class Main extends Sprite 
	{
 
		public function Main() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		public var flashVars:Object = stage.loaderInfo.parameters as Object;
		public var VKAPI:APIConnection = new APIConnection(flashVars);
		public static var avatar:String = new String;
 
		private var txt:TextField;
 
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			txt = new TextField();
			txt.width = 800;
			txt.height = 600;
			txt.wordWrap = true;
			txt.appendText("> flashVars: " + JSON.encode(flashVars) + "\n\n");
			addChild(txt);
 
			VKAPI.api(
				"users.get", { user_ids:flashVars['viewer_id'], fields:"photo_50", name_case:"nom" }, usersGetSuccess, usersGetError
			);
		}
 
		public function usersGetSuccess(data:Object):void
		{
			txt.appendText("> usersGet: " + JSON.encode(data) + "\n\n");
			avatar = data[0].photo_50;
 
			txt.appendText("> avatar: " + avatar + "\n\n");
 
			var loader:Loader = new Loader();
			loader.load(new URLRequest(avatar));
			loader.x = 100;
			loader.y = 100;
			addChild(loader);
		}
 
		public function usersGetError(data:Object):void
		{
			txt.appendText("> usersGet: error: " + JSON.encode(data) + "\n\n");
		}
 
	}
 
}
Вот результат его действий:


То есть, всё работает. Теперь, я немного преобразую и создам класс Profile, куда помещу весь код из Main.
Класс Main:
Код AS3:
package
{
 
	import flash.display.Sprite;
	import flash.events.Event;
	/*
	import flash.display.Loader;
	import flash.net.URLRequest;
	import flash.text.TextField;
	import vk.APIConnection;
	import vk.api.serialization.json.JSON;
	*/
	/**
	 * ...
	 * @author Volodin Alexandr Sergeevich
	 */
	public class Main extends Sprite 
	{
 
		public function Main() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		/*
		public var flashVars:Object = stage.loaderInfo.parameters as Object;
		public var VKAPI:APIConnection = new APIConnection(flashVars);
		public static var avatar:String = new String;
 
		private var txt:TextField;
		*/
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			addChild(new Profile); // добавил класс в Main
 
			/*
			txt = new TextField();
			txt.width = 800;
			txt.height = 600;
			txt.wordWrap = true;
			txt.appendText("> flashVars: " + JSON.encode(flashVars) + "\n\n");
			addChild(txt);
 
			VKAPI.api(
				"users.get", { user_ids:flashVars['viewer_id'], fields:"photo_50", name_case:"nom" }, usersGetSuccess, usersGetError
			);
			*/
		}
 
		/*
		public function usersGetSuccess(data:Object):void
		{
			txt.appendText("> usersGet: " + JSON.encode(data) + "\n\n");
			avatar = data[0].photo_50;
 
			txt.appendText("> avatar: " + avatar + "\n\n");
 
			var loader:Loader = new Loader();
			loader.load(new URLRequest(avatar));
			loader.x = 100;
			loader.y = 100;
			addChild(loader);
		}
 
		public function usersGetError(data:Object):void
		{
			txt.appendText("> usersGet: error: " + JSON.encode(data) + "\n\n");
		}
		*/
	}
 
}
Класс Profile:
Код AS3:
package  
{
 
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLRequest;
	import flash.text.TextField;
	import vk.APIConnection;
	import vk.api.serialization.json.JSON;
 
	/**
	 * ...
	 * @author Volodin Alexandr Sergeevich
	 */
	public class Profile extends Sprite
	{
 
		public var flashVars:Object = stage.loaderInfo.parameters as Object;
		public var VKAPI:APIConnection = new APIConnection(flashVars);
		public static var avatar:String = new String;
 
		private var txt:TextField;
 
		public function Profile() 
		{
			txt = new TextField();
			txt.width = 800;
			txt.height = 600;
			txt.wordWrap = true;
			txt.appendText("> flashVars: " + JSON.encode(flashVars) + "\n\n");
			addChild(txt);
 
			VKAPI.api(
				"users.get", { user_ids:flashVars['viewer_id'], fields:"photo_50", name_case:"nom" }, usersGetSuccess, usersGetError
			);
		}
 
		public function usersGetSuccess(data:Object):void
		{
			txt.appendText("> usersGet: " + JSON.encode(data) + "\n\n");
			avatar = data[0].photo_50;
 
			txt.appendText("> avatar: " + avatar + "\n\n");
 
			var loader:Loader = new Loader();
			loader.load(new URLRequest(avatar));
			loader.x = 100;
			loader.y = 100;
			addChild(loader);
		}
 
		public function usersGetError(data:Object):void
		{
			txt.appendText("> usersGet: error: " + JSON.encode(data) + "\n\n");
		}
 
	}
 
}
Но теперь вместо фотки - пустой экран:


Что не так делаю?
__________________
Надо сменить подпись...

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

Регистрация: Dec 2014
Сообщений: 312
Пока вы не добавили объект на экран, его свойство stage равно null.

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

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
__________________
Надо сменить подпись...

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

Регистрация: Dec 2014
Сообщений: 312
У вас addChild() выполняется после создания объекта.

Строчка stage.loaderInfo.parameters выполняется до addChild().

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

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
То есть, сначала нужно добавить через addChild что-то на сцену, а потом заполнять его или что?

Добавлено через 54 секунды
Просто хочу понять, как правильно добавить экземпляр на сцену.

Добавлено через 3 минуты
Таким макаром не получилось..
__________________
Надо сменить подпись...

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

Регистрация: Dec 2014
Сообщений: 312
Код AS3:
package
{
 
	import flash.display.Sprite;
	import flash.events.Event;
	/*
	import flash.display.Loader;
	import flash.net.URLRequest;
	import flash.text.TextField;
	import vk.APIConnection;
	import vk.api.serialization.json.JSON;
	*/
	/**
	 * ...
	 * @author Volodin Alexandr Sergeevich
	 */
	public class Main extends Sprite 
	{
 
		public function Main() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		/*
		public var flashVars:Object = stage.loaderInfo.parameters as Object;
		public var VKAPI:APIConnection = new APIConnection(flashVars);
		public static var avatar:String = new String;
 
		private var txt:TextField;
		*/
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			addChild(new Profile); // добавил класс в Main
 
			/*
			txt = new TextField();
			txt.width = 800;
			txt.height = 600;
			txt.wordWrap = true;
			txt.appendText("> flashVars: " + JSON.encode(flashVars) + "\n\n");
			addChild(txt);
 
			VKAPI.api(
				"users.get", { user_ids:flashVars['viewer_id'], fields:"photo_50", name_case:"nom" }, usersGetSuccess, usersGetError
			);
			*/
		}
 
		/*
		public function usersGetSuccess(data:Object):void
		{
			txt.appendText("> usersGet: " + JSON.encode(data) + "\n\n");
			avatar = data[0].photo_50;
 
			txt.appendText("> avatar: " + avatar + "\n\n");
 
			var loader:Loader = new Loader();
			loader.load(new URLRequest(avatar));
			loader.x = 100;
			loader.y = 100;
			addChild(loader);
		}
 
		public function usersGetError(data:Object):void
		{
			txt.appendText("> usersGet: error: " + JSON.encode(data) + "\n\n");
		}
		*/
	}
 
}
Код AS3:
package  
{
 
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLRequest;
	import flash.text.TextField;
	import vk.APIConnection;
	import vk.api.serialization.json.JSON;
 
	/**
	 * ...
	 * @author Volodin Alexandr Sergeevich
	 */
	public class Profile extends Sprite
	{
 
		public var flashVars:Object;
		public var VKAPI:APIConnection;
		public static var avatar:String = new String;
 
		private var txt:TextField;
 
		public function Profile() 
		{
			txt = new TextField();
			txt.width = 800;
			txt.height = 600;
			txt.wordWrap = true;
			addChild(txt);
 
			addEventListener(Event.ADDED_TO_STAGE, addedToStage);
		}
 
		private function addedToStage(e:Event):void 
		{
			flashVars = stage.loaderInfo.parameters as Object;
			VKAPI = new APIConnection(flashVars);
 
			txt.appendText("> flashVars: " + JSON.encode(flashVars) + "\n\n");
 
			VKAPI.api(
				"users.get", { user_ids:flashVars['viewer_id'], fields:"photo_50", name_case:"nom" }, usersGetSuccess, usersGetError
			);
		}
 
		public function usersGetSuccess(data:Object):void
		{
			txt.appendText("> usersGet: " + JSON.encode(data) + "\n\n");
			avatar = data[0].photo_50;
 
			txt.appendText("> avatar: " + avatar + "\n\n");
 
			var loader:Loader = new Loader();
			loader.load(new URLRequest(avatar));
			loader.x = 100;
			loader.y = 100;
			addChild(loader);
		}
 
		public function usersGetError(data:Object):void
		{
			txt.appendText("> usersGet: error: " + JSON.encode(data) + "\n\n");
		}
 
	}
 
}
Добавлено через 1 минуту
Напишите к каким выводам пришли после прочтения моего кода.

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

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
надо же.. получилось... А что вообще произошло, если не секрет? Что не так было?

Добавлено через 3 минуты
Я так понял, если надо что-то добавить на сцену, надо это инициировать через ADDED_TO_STAGE?

Добавлено через 5 минут
А нееееееет... Просто добавилось раньше, чем отправился запрос... Поэтому данных не было, хотя само тектовое поле было. Правильно?
__________________
Надо сменить подпись...

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от EndoCrinologist Посмотреть сообщение
А что вообще произошло, если не секрет?
Просто все манипуляции, где вы использовали stage, выполнились тогда, когда эта stage стала доступной.

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

блогер
Регистрация: Feb 2011
Адрес: Россия, Тольятти
Сообщений: 301
Записей в блоге: 10
А такой вопрос: как мне получить доступ к stage.height? опять нужно что-то инициировать или если произошло инициирование, то уже доступен этот параметр?

Добавлено через 1 минуту
и да, допустим я создал экземпляр Profile. Допустим, я вывожу не только фото, но и данные игры (сколько очков, уровень и т.д.) и мне надо обновить эти данные. каким способом мне лучше всего пересоздать экземпляр, если один уже есть?
__________________
Надо сменить подпись...

Старый 22.08.2015, 23:21
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 10  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
постараюсь на пальцах
ADDED_TO_STAGE - просто слушатель события, который срабатывает, когда появился доступ к stage
когда вы пишите
Код AS3:
var AABB:Class = new Class//ваш класс
то выполняется код в классе, но если вы что-то в этом классе добавляете на сцену, то это не произойдёт, т.к. ссылки на stage нету
что бы класс получил ссылку на stage, то нужно написать, после инициализации, addChild(Ваш класс)
по этому используется слушатель ADDED_TO_STAGE, выполниться весь код, кроме того, что вызовет этот слушатель, а когда вы добавите ваш класс на сцену, то выполниться остальная часть, в ней как раз и стоит что либо добавлять на сцену, можно конечно обойти(передать ссылку на stage при вызове класса), но не стоит писать такой код

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

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

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


 


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


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