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

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

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

Регистрация: Jul 2009
Сообщений: 6
По умолчанию Доступ к основным методам

Есть такая прога


mainApp.as
Код AS3:
package
{
        import flash.display.Sprite;
        import classes.exampleClass;
 
        public class mainApp extends Sprite
        {
                  public function mainApp():void
                  {
                           new exampleClass();
                  }
 
                  public function test():void
                  {
                  }
        }
}
classes/exampleClass.as
Код AS3:
package classes
{
        public class exampleClass
        {
                  public function exampleClass():void
                  {
                         // нужно вызвать test() из mainApp
                  }
        }
}
В flex можно заюзать Application.application.test() а тут как быть?


Последний раз редактировалось iNils; 09.07.2009 в 01:31.
Старый 09.07.2009, 01:37
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 2  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
А у вас есть метод test в mainApp?

Старый 09.07.2009, 01:40
winbackgo вне форума Посмотреть профиль Отправить личное сообщение для winbackgo Найти все сообщения от winbackgo
  № 3  
Ответить с цитированием
winbackgo

Регистрация: Jul 2009
Сообщений: 6
public function test():void

Старый 09.07.2009, 01:44
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Код AS3:
new exampleClass(this);
Код AS3:
package classes {
        public class exampleClass {
                  public function exampleClass(target:mainApp) {
                        target.test(); 
                  }
        }
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
тьфу ты...))

Вам для каких целей?


просто так в своем екземплклассе вы не сможете добраться до майн класса

там либо передавать ссылку, либо вы можете создать статичное свойство вроде такого

Код AS1/AS2:
package {
import flash.display.Sprite;
import flash.events.Event;
 
 
public class Main extends Sprite {
private static var _instance:Main;
 
public function Main():void {
_instance=this;
new exampleClass();
}
 
public function test():void{}
 
static public function get instance():Main { return _instance; }
}
 
}
ну а потом вызвать примерно так

Код AS3:
package classes
{
        public class exampleClass
        {
                  public function exampleClass():void
                  {
                        Main.instance.test()
                  }
        }
}
как то так... но по сути, как я понимаю это просто реализация флексового Application


Последний раз редактировалось ramshteks; 09.07.2009 в 01:51.
Старый 09.07.2009, 01:58
winbackgo вне форума Посмотреть профиль Отправить личное сообщение для winbackgo Найти все сообщения от winbackgo
  № 6  
Ответить с цитированием
winbackgo

Регистрация: Jul 2009
Сообщений: 6
при инициализации флэш инициализирует mainApp и где-то ведь хранится ссылка на него. про передачу this я думал но тогда привязка класса к mainApp и если потом его использовать в другом проекте то надо переделывать. Мне вообще это нужно для создания функции дебаг и в классе проверить если она доступна то вызывать. А также для доступа к параметрам flashvars через loaderInfo. В mainApp доступно root.loaderInfo.parameters как до них добраться в exampleClass?

Старый 09.07.2009, 12:11
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 7  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от winbackgo Посмотреть сообщение
при инициализации флэш инициализирует mainApp и где-то ведь хранится ссылка на него.
А Вы создали ссылку на него? Нет ссылки - нет доступа.


Цитата:
про передачу this я думал но тогда привязка класса к mainApp и если потом его использовать в другом проекте то надо переделывать.
Интерфейсы спасают.

Цитата:
Мне вообще это нужно для создания функции дебаг и в классе проверить если она доступна то вызывать.
ApplicationDomain.hasDefinition(value:String):Boolean


Цитата:
А также для доступа к параметрам flashvars через loaderInfo. В mainApp доступно root.loaderInfo.parameters как до них добраться в exampleClass?
Конфигурируте ЕxampleClass необходимыми ему параметрами. Можно в конструктор передавать. а можно сеттить после создания его экземпляра.


Код AS3:
package {
 
	import flash.display.Sprite;
 
	public class MainApp extends Sprite implements ITestable {
 
		public function MainApp() {
			super();
 
			var exampleClass:ExampleClass = new ExampleClass();
			var param:uint = parseInt(super.loaderInfo.parameters['param']);
 
			exampleClass.controller = this;
			exampleClass.param = param;
		}
 
		public function test(value:uint):void {
			trace('Tested: ' + value);
		}
	}
}

Код AS3:
package {
 
	public class ExampleClass {
 
		public function ExampleClass() {
			super();
		}
 
		//-----------------------------
		//  controller
		//-----------------------------
		private var _controller:	ITestable;
 
		public function set controller(value:ITestable):void {
			if (this._controller == value) return;
			this._controller = value;
		}
 
		public function get controller():ITestable {
			return this._controller;
		}
 
		//-----------------------------
		//  param
		//-----------------------------
		public function set param(value:uint):void {
			if (this._controller) this._controller.test(value);
		}
 
	}
}
Код AS3:
package {
 
	public interface ITestable {
		function test():void;
	}
 
}
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
ну по идее для доступа к флешворсам вам достаточно создать экземпляр LoaderInfo в вашем экземпеле и получить доступ к флеш ворсам. Для этого по крайней мере не нужна ссылка на документ класс

Старый 09.07.2009, 02:31
winbackgo вне форума Посмотреть профиль Отправить личное сообщение для winbackgo Найти все сообщения от winbackgo
  № 9  
Ответить с цитированием
winbackgo

Регистрация: Jul 2009
Сообщений: 6
что-то не сработало с instance. говорит что нулл. main = Main.inst(); а при вызове main.Log ругается что main null

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

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
код ваш выложите

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

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

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


 


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


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