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

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

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

Регистрация: Apr 2014
Сообщений: 97
По умолчанию Как дать доступ к объекту другой функции в основном классе

Если вы создали в функции Main основного класса объект, то чтобы изменить его значение в другой функции этого класса что надо сделать.

Почему-то такой код работает (то есть меняет значение text1 c "Text" на "Hello" после запуска программы:
Код AS3:
package {
	/**
	 * ...
	 * @author Scorpion
	 */
	import flash.events.*;
	import flash.display.*;
	import flash.text.*;
	import myClasses.*;
 
	public class Main extends Sprite 
	{
		public function Main() 
		{
			if (stage) 
			init();
			else
			addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		public function init(): void 
		{
			addChild(Image.addImage(0, 0, "background"));
			addChild(Image.addImage(0, 0, "head"));
			addChild(Image.addImage(0, 200, "menuline"));
 
			var text1: TextF = new TextF;
			addChild(text1.addText("Text", 100, 200));
			text1.changeText("Hello");
 
			var button: Button = new Button;
			addChild(button.addButton(200, 200)).addEventListener(MouseEvent.CLICK, funButton);
		}
	}
}
А такой (которые должен бы был менять значение после нажатия конпки) - нет:
Код AS3:
package {
	/**
	 * ...
	 * @author Scorpion
	 */
	import flash.events.*;
	import flash.display.*;
	import flash.text.*;
	import myClasses.*;
 
	public class Main extends Sprite 
	{
		public function Main() 
		{
			if (stage) 
			init();
			else
			addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		public function init(): void 
		{
			addChild(Image.addImage(0, 0, "background"));
			addChild(Image.addImage(0, 0, "head"));
			addChild(Image.addImage(0, 200, "menuline"));
 
			var text1: TextF = new TextF;
			addChild(text1.addText("Text", 100, 200));
 
			var button: Button = new Button;
			addChild(button.addButton(200, 200)).addEventListener(MouseEvent.CLICK, funButton);
		}
 
		public function funButton(e:MouseEvent): void
		{
			text1.changeText("Hello");
		}
	}
}
Ну а вот собственно сам класс TextF:
Код AS3:
package myClasses 
{
	/**
	 * ...
	 * @author Scorpion
	 */
	import flash.events.*;
	import flash.display.*;
	import flash.text.*;
 
	public class TextF extends Sprite
	{
		public var text: TextField = new TextField;
 
		public function addText(value: String, x: int, y: int): TextField 
		{
			text.text = value;
			text.x = x;
			text.y = y;
			text.autoSize = "left";
 
			var format: TextFormat = new TextFormat;
			format.size = 40;
			format.font = "Monotype Corsiva";
 
			text.setTextFormat(format);
 
			return text;
		}
 
		public function changeText(newText: String): void
		{
			text.text = newText;
 
			var format: TextFormat = new TextFormat;
			format.size = 40;
			format.font = "Monotype Corsiva";
 
			text.setTextFormat(format);
		}
	} 
}
Когда в функции funButton в Main ввожу text1 оно вообще не видит его как существующую переменную (то есть после funButton. не выводится список методов, которые можно вызвать).

Добавлено через 15 минут
Стоп, ко мне пришло озарение ... надо было public var text1: TextF = new TextF; прописать не в функции Main, а в классе. А без этого обеспечить доступ переменной из функции в функцию нельзя?

Добавлено через 20 минут
Видно нельзя ... но почему-то никто тут мне не говорил, что объявлять переменные, которые используются в нескольких функциях класса, надо в классе, а не в главной функции(((

Старый 05.05.2014, 02:08
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Вы бы еще попросили рассказать "почему трава зеленая". Учите матчасть, вам говорят.

Старый 05.05.2014, 02:09
2misha вне форума Посмотреть профиль Отправить личное сообщение для 2misha Найти все сообщения от 2misha
  № 3  
Ответить с цитированием
2misha

Регистрация: Apr 2014
Сообщений: 97
Да учу уже, учу.

Чтоб симитировать переход между страницами сайта, когда программируешь в классах ... в Adobe Flash CS6 просто размещал разные страницы в разных кадрах и использовал кнопки перехода между кадрами, которые вызывали функцию gotoAndPlay(номер кадра) ... а в Flash Develop ...
Это значит создать кнопки, которые будут делать другие элементы видимыми или невидимыми?

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Если вам недостаточно примеров работы с ООП, то могу лишь в очередной раз отправить читать Мука.
Если вы нарочно читаете между строк и пропускаете мимо ушей примеры, то тут мне ничего не поделать.

Вот, допустим, у вас есть как бы область в программе, например, форма входа.
Форма входа - это отдельный класс, который вы добавляете на сцену в классе страницы входа.
В классе формы входа у вас есть 3 вовсе не связанных между собой элемента, 2 текстовых поля с кастом настройками(возможно, при помощи наследования), и одна кнопка, которая может быть экземпляром класса Button, который я привёл вам в прошлой теме, а вы просто пропустили его мимо глаз, будто я ничего не писал.(Хотя потратил я минут 30, чтобы запустить среду, подумать над архитектурой и написать 2 класса)
__________________
There is no thing in this world that is not simple.

Старый 05.05.2014, 03:27
2misha вне форума Посмотреть профиль Отправить личное сообщение для 2misha Найти все сообщения от 2misha
  № 5  
Ответить с цитированием
2misha

Регистрация: Apr 2014
Сообщений: 97
Ну то есть те 3 элемента в классе формы вешаются на один Спрайт, а в главной классе мы делаем этот Спрайт видимым или нет, да?

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
В главном классе мы "переключаем" классы как вкладки.
Один класс = 1 вкладка, и лишь вы решаете, какие вам классы понадобятся внутри, и выделять ли для этого отдельный класс(хотя точнее вы решаете это в определённом контексте).
Например, кнопку можно нарисовать прямо в Main и повесить на неё события клика. Но вы же не будете это делать, верно?

Добавлено через 5 минут
Переключать вкладки можно разными способами. Как вариант, можно добавить метод очистки контента, который будет удалять текущий класс со сцены, и под добавление каждого класса новый метод(а слушатель кликов можно свитчем повесить).
И при каждом клике сначала очищаем контент, потом свитч на какая кнопка нажата, в нём вызов метода.
__________________
There is no thing in this world that is not simple.

Старый 05.05.2014, 10:53
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 7  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
метод очистки контента, который будет удалять текущий класс со сцены
2ТС, не класс, а экземпляр класса.
__________________
тут я

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

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

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


 


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


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