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

Aerials 12.08.2013 12:19

Как достать переменную из функции?
 
AS3 не изучал, но появилась необходимость создать приложение. Столкнулся с проблемой: не могу достать переменную kft_zamkn5 из функции. Необходимо её после сделать глобальной, а я даже вытащить её не могу. Кто знает, помогите.

Вот код:

Код AS3:

public class fishka5 extends MovieClip
        {
                protected var originalPosition:Point;
                public function fishka5()
                {
                        originalPosition = new Point (x,y);
                        buttonMode = true;
                        addEventListener ( MouseEvent.MOUSE_DOWN, down );
                }
                        protected function down( event:MouseEvent ):void
                {
                        parent.addChild( this );
                        startDrag();
                        stage.addEventListener( MouseEvent.MOUSE_UP, stageUp );
                }
                        protected function stageUp( event:MouseEvent ):void
                {
                        stage.removeEventListener( MouseEvent.MOUSE_UP, stageUp );
                        stopDrag();
 
                        if ( dropTarget )
                                {       
                                        var slot = dropTarget.parent.name;
                                        if ( slot == "e1" ){
                                                kft_zamkn5 = -1;
                                        }
                                        else if ( slot == "d1" ){
                                                kft_zamkn5 = 0;
                                        }
                                        buttonMode = false;
                                        removeEventListener ( MouseEvent.MOUSE_DOWN, down );
                                } else {
                                                        returnToOriginalPosition();
                                                }
                }
                        protected function returnToOriginalPosition():void
                                {
                                        x = originalPosition.x;
                                        y = originalPosition.y;
                                }
        }
}


Wolsh 12.08.2013 13:17

У Вас она даже не объявлена как переменная. По идее этот код вообще не должен компилиться.
А чтобы "вытащить", объявите ее не локально а как члена класса (как Вы поступили с originalPosition).

Tails 12.08.2013 13:32

Нельзя достать переменную из функций. Это нарушает принцип инкапсуляции. Функция может вернуть результат своих вычислений.

Если для расчётов в функций, вам нужно внешнее значение, поступите так как вам посоветовали выше - объявите переменную свойством экземпляра или статическим свойством класса.

ZackMercury 12.08.2013 13:46

Так вы сможете использовать переменную в любом месте класса или в классе, наследующем данный класс:
Код AS3:

public class fishka5 extends MovieClip
        {
                protected var originalPosition:Point;
      protected var
kft_zamkn5:Number;
//or integer if your variable is always an int
                public function fishka5()
                {
                        originalPosition = new Point (x,y);
                        buttonMode = true;
                        addEventListener ( MouseEvent.MOUSE_DOWN, down );
                }
                        protected function down( event:MouseEvent ):void
                {
                        parent.addChild( this );
                        startDrag();
                        stage.addEventListener( MouseEvent.MOUSE_UP, stageUp );
                }
                        protected function stageUp( event:MouseEvent ):void
                {
                        stage.removeEventListener( MouseEvent.MOUSE_UP, stageUp );
                        stopDrag();
 
                        if ( dropTarget )
                                {       
                                        var slot = dropTarget.parent.name;
                                        if ( slot == "e1" ){
                                                kft_zamkn5 = -1;
                                        }
                                        else if ( slot == "d1" ){
                                                kft_zamkn5 = 0;
                                        }
                                        buttonMode = false;
                                        removeEventListener ( MouseEvent.MOUSE_DOWN, down );
                                } else {
                                                        returnToOriginalPosition();
                                                }
                }
                        protected function returnToOriginalPosition():void
                                {
                                        x = originalPosition.x;
                                        y = originalPosition.y;
                                }
        }
}

Добавлено через 3 минуты
А так в любом месте программы:

Код AS3:

public class fishka5 extends MovieClip
        {
                protected var originalPosition:Point;
      public var kft_zamkn5:Number;
//or integer, if your variable is always an int.
                public function fishka5()
                {
                        originalPosition = new Point (x,y);
                        buttonMode = true;
                        addEventListener ( MouseEvent.MOUSE_DOWN, down );
                }
                        protected function down( event:MouseEvent ):void
                {
                        parent.addChild( this );
                        startDrag();
                        stage.addEventListener( MouseEvent.MOUSE_UP, stageUp );
                }
                        protected function stageUp( event:MouseEvent ):void
                {
                        stage.removeEventListener( MouseEvent.MOUSE_UP, stageUp );
                        stopDrag();
 
                        if ( dropTarget )
                                {       
                                        var slot = dropTarget.parent.name;
                                        if ( slot == "e1" ){
                                                kft_zamkn5 = -1;
                                        }
                                        else if ( slot == "d1" ){
                                                kft_zamkn5 = 0;
                                        }
                                        buttonMode = false;
                                        removeEventListener ( MouseEvent.MOUSE_DOWN, down );
                                } else {
                                                        returnToOriginalPosition();
                                                }
                }
                        protected function returnToOriginalPosition():void
                                {
                                        x = originalPosition.x;
                                        y = originalPosition.y;
                                }
        }
}


Aerials 12.08.2013 13:58

Всем спасибо, буду разбираться.

Aerials 12.08.2013 14:02

Наверное, я неправильно выразился. Мне не столько важна сама переменная, сколько её значение после выполнения данной функции.

Akopalipsis 12.08.2013 14:07

Код AS3:

var a:int = 0;
var b:int = sum(a);
trace(b);// 5
private function sum(num:int):int
{
    var c:int = 5;
    return c + num;//возвращает значение сложения
}


Aerials 12.08.2013 14:25

Цитата:

Сообщение от Akopalipsis (Сообщение 1143539)
Код AS3:

var a:int = 0;
var b:int = sum(a);
trace(b);// 5
private function sum(num:int):int
{
    var c:int = 5;
    return c + num;//возвращает значение сложения
}


Спасибо, буду разбираться.

Akopalipsis 12.08.2013 14:37

Цитата:

Спасибо, буду разбираться.
А тут все просто -
Код AS3:

var a:int = 0;//создали переменную со значением ноль
var b:int = sum(a);//создали переменную и присвоили ей в качестве значения
//результат сложения, который возвратит метод sum(num:int), самому методу
//передаете в качестве аргумента переменную а. var b:int = sum(a); == var b:int = 5
trace(b);// 5
private function sum(num:int):int
{
    var c:int = 5;
    return c + num;//возвращает значение сложения
}


SvetozarPNZ 12.08.2013 14:59

Цитата:

protected var originalPosition:Point;
На следующей строке пишете переменную
Код AS3:

var kft_zamkn5;

В любом классе внутри приложения вы можете создать экземпляр вашего класса fishka5

Например:

Код AS3:

var example_fishka5:fishka5;

И затем обращаться к данной переменной (как к свойству объекта)

Код AS3:

trace(example_fishka5.kft_zamkn5)



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

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