Форум 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. Допустим, я вывожу не только фото, но и данные игры (сколько очков, уровень и т.д.) и мне надо обновить эти данные. каким способом мне лучше всего пересоздать экземпляр, если один уже есть?
__________________
Надо сменить подпись...

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от EndoCrinologist Посмотреть сообщение
А такой вопрос: как мне получить доступ к stage.height? опять нужно что-то инициировать или если произошло инициирование, то уже доступен этот параметр?
Нужно просто запомнить следующее: любой объект (класс) ничего не знает о других объектах, которые у вас в проекте (это логично). Чтобы кто-то узнал о ком-то, нужно строить связи, например передавая ссылки друг-другу. Но визуальные объекты (спрайты, мувиклипы, шейпы и т.д.), автоматически получают ссылку на Stage - если они добавлены в отображение (то-есть видны на экране, даже если за границами) и эта ссылка зануляется (null), если объект убран из отображения.
Свойство stage (с маленькой буквы), у спрайтов и т.д. - это просто ссылка на основную сцену Stage (с заглавной буквы). Так что если вы хотите обратиться к сцене из визуального объекта, то убедитесь, что его свойство stage не равняется null. Либо, как уже подсказали, передавать ссылку на сцену вручную.

p.s. stage.height вернёт размер не флешки, а величину графического содержимого в данный момент на экране.
А stage.stageHeigth - размер флешки.

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

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

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


 


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


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