Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как дать доступ к объекту другой функции в основном классе (http://www.flasher.ru/forum/showthread.php?t=207739)

2misha 05.05.2014 01:21

Как дать доступ к объекту другой функции в основном классе
 
Если вы создали в функции 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 минут
Видно нельзя ... но почему-то никто тут мне не говорил, что объявлять переменные, которые используются в нескольких функциях класса, надо в классе, а не в главной функции(((

alexcon314 05.05.2014 02:08

Вы бы еще попросили рассказать "почему трава зеленая". Учите матчасть, вам говорят.

2misha 05.05.2014 02:09

Да учу уже, учу.

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

ZackMercury 05.05.2014 02:43

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

Вот, допустим, у вас есть как бы область в программе, например, форма входа.
Форма входа - это отдельный класс, который вы добавляете на сцену в классе страницы входа.
В классе формы входа у вас есть 3 вовсе не связанных между собой элемента, 2 текстовых поля с кастом настройками(возможно, при помощи наследования), и одна кнопка, которая может быть экземпляром класса Button, который я привёл вам в прошлой теме, а вы просто пропустили его мимо глаз, будто я ничего не писал.(Хотя потратил я минут 30, чтобы запустить среду, подумать над архитектурой и написать 2 класса)

2misha 05.05.2014 03:27

Ну то есть те 3 элемента в классе формы вешаются на один Спрайт, а в главной классе мы делаем этот Спрайт видимым или нет, да?

ZackMercury 05.05.2014 03:36

В главном классе мы "переключаем" классы как вкладки.
Один класс = 1 вкладка, и лишь вы решаете, какие вам классы понадобятся внутри, и выделять ли для этого отдельный класс(хотя точнее вы решаете это в определённом контексте).
Например, кнопку можно нарисовать прямо в Main и повесить на неё события клика. Но вы же не будете это делать, верно?

Добавлено через 5 минут
Переключать вкладки можно разными способами. Как вариант, можно добавить метод очистки контента, который будет удалять текущий класс со сцены, и под добавление каждого класса новый метод(а слушатель кликов можно свитчем повесить).
И при каждом клике сначала очищаем контент, потом свитч на какая кнопка нажата, в нём вызов метода.

КорДум 05.05.2014 10:53

Цитата:

метод очистки контента, который будет удалять текущий класс со сцены
2ТС, не класс, а экземпляр класса.


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

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