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

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

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

Регистрация: May 2014
Сообщений: 26
По умолчанию Передача объекта

Возник такой вопрос:

Есть 2 класса совмещенных в 1 пакете.
Первый:
Код AS1/AS2:
package chat
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    class Test1 extends Sprite{
     var a:TextField = new TextField();
 
          public function Test1()
 {
 }
    }
}
И второй:
Код AS1/AS2:
package chat
{
    class Test2{
 
     public function Test1()
     {
     }
     function qwerty():void
     {
         a.text = "123";
     }
 }
}
При импорте 2-го класса в другой пакет и попытки воспользоваться его методом "qwerty" возникает ошибка: Error: Access of undefined property qwerty.
Что я делаю не так?


Последний раз редактировалось Void; 09.08.2014 в 19:03.
Старый 09.08.2014, 19:49
LifeIsRhythm вне форума Посмотреть профиль Отправить личное сообщение для LifeIsRhythm Найти все сообщения от LifeIsRhythm
  № 2  
Ответить с цитированием
LifeIsRhythm
[+1 22.07.14]
[+4 12.08.14]
[+1 09.02.15]

Регистрация: May 2014
Сообщений: 182
Если не писать модификатор доступа, то по умолчанию будет internal, который доступен только внутри пакета.
Вообще не указывать модификаторы, это грубо для as3 и лучше научиться разбираться в них сразу.

Добавлено через 2 минуты
И то ли конструктор у Вас неправильно назван, то ли метод с большой буквы.

Старый 09.08.2014, 19:53
PedroHallo вне форума Посмотреть профиль Отправить личное сообщение для PedroHallo Найти все сообщения от PedroHallo
  № 3  
Ответить с цитированием
PedroHallo

Регистрация: Jul 2014
Сообщений: 6
Код AS3:
a.text = "123";
Вы не определили экземпляр класса TextField, к которому обращаетесь.

Добавлено через 10 минут
Код AS3:
package chat
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
 
	/**
	 * ...
	 * 
	 */
	public class Main extends Sprite 
	{
		private var textField:TextField;
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			this.textField = new TextField();
			this.addChild(this.textField);
			const TEXT_TWO:Text2 = new Text2();
			TEXT_TWO.qwerty(this.textField);
		}
 
	}
 
}
Код AS3:
package chat 
{
	import flash.text.TextField;
	/**
	 * ...
	 * 
	 */
	internal class Text2 
	{
 
		public function Text2() 
		{
 
		}
		internal function qwerty(textField:TextField):void
		{
			textField.text = '123';
		}
	}
 
}


Последний раз редактировалось PedroHallo; 09.08.2014 в 20:06.
Старый 10.08.2014, 17:52
Void вне форума Посмотреть профиль Отправить личное сообщение для Void Найти все сообщения от Void
  № 4  
Ответить с цитированием
Void

Регистрация: May 2014
Сообщений: 26
Спасибо что ответили, а как сделать так:

Есть два класса в одном пакете. В одном классе создается текстовое поле с именем txt, как к этому полю обратиться из 2-го класса?

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

Регистрация: Jun 2008
Сообщений: 126
Цитата:
Сообщение от Void Посмотреть сообщение
Спасибо что ответили, а как сделать так:

Есть два класса в одном пакете. В одном классе создается текстовое поле с именем txt, как к этому полю обратиться из 2-го класса?
Код AS3:
package somePackage
{
	import flash.display.Sprite;
 
	public class Main extends Sprite 
	{
		public function Main():void 
		{
			var b:B = new B();
			trace(b.txt);
		}
	}
}
 
package somePackage
{
	import flash.text.TextField;
 
	public class B 
	{
		public var txt:TextField;
 
		public function B() 
		{
 
		}
	}
}

Старый 10.08.2014, 23:23
Моше Дауге вне форума Посмотреть профиль Отправить личное сообщение для Моше Дауге Найти все сообщения от Моше Дауге
  № 6  
Ответить с цитированием
Моше Дауге

Регистрация: Aug 2014
Сообщений: 5
Цитата:
Сообщение от Void Посмотреть сообщение
Спасибо что ответили, а как сделать так:

Есть два класса в одном пакете. В одном классе создается текстовое поле с именем txt, как к этому полю обратиться из 2-го класса?
Цитата:
Сообщение от sospamom Посмотреть сообщение
Код AS3:
package somePackage
{
	import flash.display.Sprite;
 
	public class Main extends Sprite 
	{
		public function Main():void 
		{
			var b:B = new B();
			trace(b.txt);
		}
	}
}
 
package somePackage
{
	import flash.text.TextField;
 
	public class B 
	{
		public var txt:TextField;
 
		public function B() 
		{
 
		}
	}
}
Вы определили переменную экземпляра, а не класса.

Добавлено через 1 минуту
Цитата:
Сообщение от Void Посмотреть сообщение
Спасибо что ответили, а как сделать так:

Есть два класса в одном пакете. В одном классе создается текстовое поле с именем txt, как к этому полю обратиться из 2-го класса?
Код AS3:
var a:TextField = new TextField();
Вы определили переменную экземпляра, а значит, что к этой переменной можно обращаться только через экземпляр этого класса и через его потомков (если не считать ссылок).
Вам нужно определить статическую переменную — переменную класса, к которой можно обращаться только через класс, где определенна эта статическая переменная.
Чтобы определить статическую переменную Вам следует написать перед словом var слово static, и так как Вы хотите обращаться к статической переменной только в том пакете,
где она находится, то Вам следует написать перед словом static модификатор управления доступом internal — обращение внутри класса, в классах, находящихся в том же пакете, что и этот, и через потомков класса.

Код AS3:
internal static var a:TextField = new TextField();
Чтобы обратиться к статической переменной Вам следует написать перед идентификатором статической переменной (её названием) название класса, в котором она определена.

Код AS3:
Test1.a;


Последний раз редактировалось Моше Дауге; 10.08.2014 в 23:42.
Создать новую тему Ответ Часовой пояс GMT +4, время: 14:01.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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