Форум 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=213343)

Anbu51Ru 12.09.2016 16:42

Работа с классами
 
Всем привет, Помогите пожалуйста разобраться, как правильно работать с классами. В классе 2, я создаю игровую энергию, потом в добавляю ее в 1 первый класс. Все работает и отображается. Дальше я создаю функцию energyClik, которая по идеи должна при клике умешать переменную numEnergy на один и она уменьшает, НО она связана с динамическим текстом energyText, значит текст тоже должен уменьшатся с 5 до 4 и т.д. но он не уменьшается. В этом вся проблема.
Код AS3:

// Класс 1
package com.content.menu
{
        import flash.display.*;
        import flash.filters.*;
        import flash.events.*;
        import flash.media.*;
        import flash.utils.*;
        import flash.text.*;
 
 
        import com.content.points.*;
 
        public class MenuGompany extends GameScreen
        {
                public static var _this:*;
                private var energy:EnergyGame;
 
 
                public function MenuGompany()
        {
 
                        _this = this;
                        energy = new EnergyGame();
 
                        //_this.energyText.text = numEnergy.toString();
 
            _this.addChild(energy);                       
 
 
                }
 
 
        }
 
}

Код AS3:

// Класс 2
package com.content.points
{
        import flash.display.*;
        import flash.filters.*;
        import flash.events.*;
        import flash.media.*;
        import flash.utils.*;
        import flash.text.*;
 
        import com.content.menu.*;
 
        public class EnergyGame extends IconEnergy
        {
 
                private var _this:*;
                public static var numEnergy: Number = 5;
 
 
                public function EnergyGame()
                {
                        _this = this;
 
                        _this.x = 300;
                        _this.y = 3;
                        _this.energyText.text = numEnergy.toString()//  вот тут проблема
 
                        _this.addEventListener(Event.ADDED_TO_STAGE, addThis);
                        _this.addEventListener(MouseEvent.CLICK, energyClik);
 
 
 
                }
 
                private function addThis(e: Event): void
                {
                        _this.removeEventListener(Event.ADDED_TO_STAGE, addThis);
                }
 
 
 
                private function energyClik(e: MouseEvent): void
                {
                    trace('click', numEnergy);
                        numEnergy--;
                }
 
 
        }
 
}


Bletraut 12.09.2016 17:44

Там нет никакой проблемы, всё работает именно так, как написано. Значение _this.energyText.text присваивается только в конструкторе. Если хочешь, чтобы переменная всегда была туда записана, то вешай либо сеттер/геттер на неё, либо ENTER_FRAME на объект.

Anbu51Ru 12.09.2016 17:59

Спасибо, через ENTER_FRAME заработало)

СлаваRa 12.09.2016 21:09

не мог пройти мимо, в чем смысл private var _this:*; и кто вам подсказал такой подход?

Anbu51Ru 12.09.2016 22:53

Ну с помощью этой переменной, я управляю объектом на сцене.

alexandrratush 12.09.2016 23:32

Цитата:

Сообщение от Anbu51Ru (Сообщение 1196126)
Ну с помощью этой переменной, я управляю объектом на сцене.

Уберите везде this и _this, и вы получите все тоже самое. :)

Anbu51Ru 12.09.2016 23:48

Ах, точно работает. Не знал, что так можно. Спасибо)

Wolsh 13.09.2016 00:29

А зачем здесь какой-то ентерфрейм? Переменная изменяется в одном конкретном месте, достаточно в этом же месте обновлять текст и всё.
Код AS3:

                private function energyClik(e: MouseEvent): void
                {
                    trace('click', numEnergy);
                        numEnergy--;
                        energyText.text = numEnergy.toString();
                }


Anbu51Ru 13.09.2016 12:03

Ок. А как мне допустим в классе 3 уменьшать numEnergy на 1 при каком нибудь действии? Логично предположить, что нужна простая проверка if
Код AS3:

private function goGame(e: MouseEvent)
                {
                        //...code
 
                        if(numEnergy > 0)
                        {
                                gameSetup();
                                numEnergy--;
                                trace("Количество энергии -",numEnergy);
                        } else
                          {
                                  noGame();
                          }
 
                }
                private function noGame()
                {
            trace("Не хватает энергии для начала игры");
                }


Flash ругается на несуществующие свойство numEnergy...

in4core 13.09.2016 13:17

у тебя оно статик EnergyGame.numEnergy


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

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