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

ndez 14.04.2011 11:44

Вызов функции и возврат значения
 
Доброго времени суток. Я начинающий. Сразу извеняюсь за терминологию (если где что не так написал). Есть вот такой код- это упращенная версия исходного кода:
Главный класс. Здесь контейнеры в которые помещают изображения.

Код AS3:

package {
        import flash.display.Sprite;
        import flash.display.Stage;
 
        [SWF(width = "640", height = "480")]
 
        public class Main extends Sprite {
                public var contener:Sprite;
                public var contenerA:Sprite;
                public var contenerB:Sprite;
                public var a;
 
                public function Main() {
                contener = new Sprite;
                contenerA = new Sprite;
                contenerB = new Sprite;
                stage.frameRate = 24;
                addChild(contener);
 
                contener.addChild(contenerA);
                contener.addChild(contenerB);
 
                a = new A(this);       
                }
        }
 
}

Класс А. Здесь добавляется картинка в один из контейнеров и происходит отслеживания нажатия клавиши пробел.

Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.display.Bitmap;
        import flash.display.Stage;
 
        public class A extends Sprite {
                private var photo1:Bitmap;
                public var ss;
                [Embed(source='../photo1.png')] public var Photo1:Class;
                public var main:Main;
                private var space:Boolean;
 
        public function A (mamain) {
 
                main = mamain;
 
                photo1 = new Photo1;
                main.contenerA.addChild(photo1);
 
                main.stage.addEventListener(KeyboardEvent.KEY_DOWN,key_down);
                main.stage.addEventListener(KeyboardEvent.KEY_UP, key_up);
                addEventListener(Event.ENTER_FRAME, onEnterFrame);
 
 
        }
                function key_down(e:KeyboardEvent) {
                        if (e.keyCode==32) {
                          space = true;
                        }
        }
                function key_up(e:KeyboardEvent) {
                        if (e.keyCode==32) {
                          space = false;
                        }
        }
                function onEnterFrame(event:Event):void {
                        if (space == true) {
                                ssss();
                        }
                function ssss() {
                        ss = new B(main);
                }
            }
        }
}

Класс B.

Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.display.Bitmap;
        import flash.display.Stage;
 
        public class B extends Sprite {
                public var main;
                private var photo2:Bitmap;
                private var photo3:Bitmap;
                private var photoX;
                private var ccc;
                public var cc:C;
        [Embed(source='../photo2.png')]  public var Photo2:Class;
        [Embed(source='../photo3.png')]  public var Photo3:Class;
 
        public function B(mamain) {
 
                main = mamain;
                photo2 = new Photo2;
                photo3 = new Photo3;
 
                /*Здесь нужен вызов функции variantPhoto () из класса С, который вернет значение variant и присвоит его переменной ссс
                */

                if (ccc==1) { photoX = photo2; }
                if (ccc == 2) { photoX = photo3; }
                photoX.x = 200;
                photoX.y = 300;
                main.contenerB.addChild(photoX);
 
        }
        }
 
}

По нажатию пробела в классе В добовляется на сцену еще какртинка, а вот какая - зависит от класса С. Вопрос как создать функцию (или метод ) которая вызовет класс С и вернет необходимое занчение???

Класс С.
Код AS3:

package  {
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.display.Stage;
        import flash.display.Sprite;
 
 
        public class C extends Sprite {
                public var variant:Number;
                private var ors;
                public var main:Main;
 
                public function C (mamain) {
 
                        main = mamain;
 
 
                        main.stage.addEventListener(KeyboardEvent.KEY_DOWN,key_down);
 
                }
 
                private function key_down(e:KeyboardEvent) {
                        if (e.keyCode == 49) {
                        variant = 1;
                        }
                        if (e.keyCode == 50) {
                        variant = 2;
                        }
                        if (e.keyCode == 51) {
                        variant = 3;
                        }
                        if (e.keyCode == 52) {
                        variant = 4;
                        }       
                }
//значение variant нужно вернут в класс В
                private function variantPhoto() {
                        return variant;
                }
 
        }
}

Мне очень хотелось разобраться в этом вопросе, особенно в плане параметров и аргументов метод и конструкторов. Заранее благодарен.

gloomyBrain 14.04.2011 12:39

В классе B подпишитесь на нажатие пробела. В классе C создайте функцию, которая будет принимать код клавиши и возвращать номер варианта.
В обработчике клавиатуры в классе B вызывайте функцию класса С и получайте Ваш вариант. Для того чтобы все заработало у B должна быть ссылка на экземпляр класса C. Если ссылку на экземпляр C передать сложно/неудобно, сделайте эту функцию статической.

ndez 14.04.2011 13:15

А разве данная функция не вернет значение нужного варианта
Код AS3:

                private function variantPhoto() {
                        return variant;
                }

Вообще то я не совсем понял зачем классу В подписываться на нажатие пробела. По нажатию пробела и так картинка вставляется на сцену. Может я конечно и не прав, но я предполагал написать в конструкторе класса В что то типа:
Код AS3:

                cc = new C();
                ccc = cc.variantPhoto();

только получается ошибка, а какие аргументы или параметры писать в скобках я не знаю. Вот по этому и спрашиваю.

BezDelnik 14.04.2011 14:35

для начала
Код AS3:

public function variantPhoto():Number {
        return variant;
}


ndez 14.04.2011 18:53

Результат получил путем перенесения слушателя клавиш выбора картинок в класс В, класс С вообще удалил. Но очень бы хотелось в плане общего развития узнать возможно ли при данном раскладе реализовать вызов метода и возврат значения и как это сделать.


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

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