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

dixlofos 02.08.2009 22:31

Помогите с разделением кода
 
:umnik2:попытался я разбить один кусок кода на 2 и у меня нечего не вышло..
вот код целого куска:
Код AS3:

package CaptureUserInput {
 
        import flash.events.*;
        import flash.text.*;
        import flash.display.Stage;
        import flash.display.*;
 
        public class CaptureUserInput extends Sprite {
 
                private var myTextBox:TextField = new TextField();
                private var myOutputBox:TextField = new TextField();
                private var myText:String = "Type your text ";
 
                public function CaptureUserInput() {
 
                        captureText();       
                        greetingapp();
                }
                public function captureText():void {
 
                        myTextBox.type = TextFieldType.INPUT;
                        myTextBox.x = 10;
                        myTextBox.y = 10;
                        myTextBox.backgroundColor=0xFF0000;
                        myTextBox.background = true;
                        addChild(myTextBox);
                        myTextBox.text = myText;
                        myTextBox.addEventListener(TextEvent.TEXT_INPUT, textInputCapture);
                }
 
                public function textInputCapture(event:TextEvent):void  {
 
                        var str:String = myTextBox.text;
                        createOutputBox(str);
                }
 
                public function createOutputBox(str:String):void {
 
                        myOutputBox.background = true;
                        myOutputBox.backgroundColor=0x00FF00;
                        myOutputBox.x = 200;
                        myOutputBox.y = 10;
                        addChild(myOutputBox);
                        myOutputBox.text = str;                       
                }
                public function greetingapp () {
              var circle:Sprite = new Sprite();
              circle.graphics.lineStyle (1);
              circle.graphics.beginFill (0xFF00CC, 1);
              circle.graphics.drawCircle (50, 100, 50);
              circle.x = 275;
              circle.y = 235;             
              circle.addEventListener (MouseEvent.CLICK, onMouseClick);
              addChild(circle);
          }
          private function onMouseClick (event:MouseEvent):void {
              trace("sss");
 
          }               
        }
}

я хотел вынести код функции greetingapp в отдельный файл, но у меня нечего не вышло..:(
что мне нужно добавить в основной код, что бы он запускал код из соседнего файла?

Dimax4d 02.08.2009 23:24

Создайте в соседнем файле новый класс и сделайте функцию greetingapp() его публичным методом

WRC_S 03.08.2009 10:08

а зачем это надо? пусть в одном куске будет!

dixlofos 03.08.2009 12:09

да я вроде так и сделал..

основной кусок:
Код AS3:

package CaptureUserInput {
 
        import flash.events.*;
        import flash.text.*;
        import flash.display.Stage;
        import flash.display.*;
 
        public class CaptureUserInput extends Sprite {
 
                private var myTextBox:TextField = new TextField();
                private var myOutputBox:TextField = new TextField();
                private var myText:String = "Type your text ";
 
                public function CaptureUserInput() {
 
                        captureText();                               
                }
                public function captureText():void {
 
                        myTextBox.type = TextFieldType.INPUT;
                        myTextBox.x = 10;
                        myTextBox.y = 10;
                        myTextBox.backgroundColor=0xFF0000;
                        myTextBox.background = true;
                        addChild(myTextBox);
                        myTextBox.text = myText;
                        myTextBox.addEventListener(TextEvent.TEXT_INPUT, textInputCapture);
                }
 
                public function textInputCapture(event:TextEvent):void  {
 
                        var str:String = myTextBox.text;
                        createOutputBox(str);
                }
 
                public function createOutputBox(str:String):void {
 
                        myOutputBox.background = true;
                        myOutputBox.backgroundColor=0x00FF00;
                        myOutputBox.x = 200;
                        myOutputBox.y = 10;
                        addChild(myOutputBox);
                        myOutputBox.text = str;                       
                }
        }
}

второй файл:

Код AS3:

package CaptureUserInput {
 
        import flash.display.Stage;
        import flash.display.*;
        import flash.events.*;
 
        public class greetingapp extends Sprite {       
 
        public function greetingapp() {
 
                        greetingapp();                       
                }
 
        public function greetingapp () {
              var circle:Sprite = new Sprite();
              circle.graphics.lineStyle (1);
              circle.graphics.beginFill (0xFF00CC, 1);
              circle.graphics.drawCircle (50, 100, 50);
              circle.x = 275;
              circle.y = 235;             
              circle.addEventListener (MouseEvent.CLICK, onMouseClick);
              addChild(circle);
          }
          private function onMouseClick (event:MouseEvent):void {
              trace("sss");
 
          }
        }
}

розовый круг не отображаеться!

alecsisk 03.08.2009 12:12

создаёшь новый класс с именем ShapeCreator, пишешь:
Код AS3:

package {
 
        import flash.display.Sprite;
 
        public class ShapeCreator {
 
 
                static function createCircle (x:int, y:int, r:int, color:Number, alpha:Number = 1):Sprite {
                        var circle:Sprite = new Sprite();
                        circle.graphics.lineStyle(1);
                        circle.graphics.beginFill(color, alpha);
                        circle.graphics.drawCircle(x, y, r);
                        return circle;
                }
        }
}

Он только создаёт нужную тебе фигуру. После этого тебе надо сделать из любого класса:
Код AS3:

var circle:Sprite = ShapeCreator.createCircle(50, 100, 50, 0xFF00CC, 1);
circle.x = 275; circle.y = 235;
circle.addEventListener (MouseEvent.CLICK, onMouseClick);
addChild(circle);

Можно конечно всё сделать в одном методе, но это сильно усложняет чтение кода.

r_r_f_r 03.08.2009 14:32

Код AS3:

addChild(<Display Object>);

Достаточно медленное существо, у тому же меняющее порядок отображения - аккуратней с ним.

И как alecsisk написал, лучше не делать, делайте по человечески.

Код AS3:

public class Circle extends Sprite
{
        private var _color:uint;
        private var _alpha:Number;
        private var _rad:Number;
        public function Circle(radius:Number = 10, color:uint = 0x000000, alpha:Number = 1)
        {
                _rad = radius;
                _color = color;
                _alpha = alpha;
                draw();
        }
 
        private function draw():void
        {
                var gr:Graphics = graphics;
                gr.beginFill(_color,_alpha);
                gr.drawCircle(0,0,_rad);
                gr.endFill();
        }
 
        public function set radius(value:Number):void
        {
                if (_rad != value)
                {
                        _rad = value;
                        draw();
                }
        }
        public function get radius():Number
        {
                return _rad;
        }
//                и т.д
}

Но на каждый кружек писать новый класс, это перебор:)

dixlofos 03.08.2009 22:42

:umnik2:
что-то не первый не второй методы не помогли отцу русской демократии))

в первом случае компилятор ругаеться на все строки, добавленные в основной класс, а во втором.. просто тишина в радиоэфире

ramshteks 04.08.2009 00:04

возможно вам нужно получше разобраться в то что вы делаете. Так как задача тривиальная.

alecsisk 04.08.2009 00:48

Вложений: 1
Вложение 22685

r_r_f_r 04.08.2009 13:08

alecsisk, можно вопрос, зачем вы разделяете код? Случаем не для того, чтоб у пользователей мобильный устройств, при просмотре кода не было полосы прокрутки? :wacko:

Код AS3:

package {
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.text.TextField;
        import flash.text.TextFieldType;
        import flash.text.TextFieldAutoSize;
        import flash.events.TextEvent;
 
        public class Main extends Sprite
        {
                private var _tf1:TextField = new TextField();
                private var _tf2:TextField = new TextField();
 
                private var _gap:Number = 10;
 
                public function Main ()
                {
                        var circle:Circle = new Circle();
                        circle.x = 275;
                        circle.y = 235;
                        circle.radius = 100;
                        circle.color = 0xFF0000;
                        circle.alpha = 0.4;
                        addChild(circle);
                        circle.addEventListener (MouseEvent.CLICK, onMouseClick);
 
                        _tf1.type = TextFieldType.INPUT;
                        addChild(_tf1);
                        _tf1.background = true;
                        _tf1.backgroundColor = 0xFF00FF;
                        _tf1.multiline = true;
                        _tf1.wordWrap = true;
 
                        _tf2.autoSize = TextFieldAutoSize.LEFT;
                        addChild(_tf2);
                        _tf2.background = false;
                        _tf2.wordWrap = true;
                        _tf2.width = _tf1.width;
                        _tf2.x = _tf1.width + _gap;
 
                        _tf1.addEventListener(TextEvent.TEXT_INPUT,onTextInput);
                }
 
                private function onTextInput(e:TextEvent):void
                {
                        _tf2.text = _tf1.text + e.text;
                }
 
                private function onMouseClick (e:Event):void
                {
                        trace("click");
                }
        }
}

и

Код AS3:

package {
 
        import flash.display.Sprite;
        import flash.display.Graphics;
 
        public class Circle extends Sprite
        {
                private var _color:uint;
                private var _alpha:Number;
                private var _rad:Number;
 
                public function Circle(radius:Number = 10, color:uint = 0x000000, alpha:Number = 1)
                {
                        _rad = radius;
                        _color = color;
                        _alpha = alpha;
                        draw();
                }
 
                private function draw():void
                {
                        var gr:Graphics = graphics;
                        gr.clear();
                        gr.beginFill(_color,_alpha);
                        gr.drawCircle(0,0,_rad);
                        gr.endFill();
                }
 
                public function set radius(value:Number):void
                {
                        if (_rad != value)
                        {
                                _rad = value;
                                draw();
                        }
                }
 
                public function get radius():Number
                {
                        return _rad;
                }
 
                public function set color(value:Number):void
                {
                        if (_color != value)
                        {
                                _color = value;
                                draw();
                        }
                }
 
                public function get color():Number
                {
                        return _color;
                }
 
                override public function set alpha(value:Number):void
                {
                        if (_alpha != value)
                        {
                                _alpha = value;
                                draw();
                        }
                }
 
                override public function get alpha():Number
                {
                        return _alpha;
                }
 
                final public function set $alpha(value:Number):void
                {
                        super.alpha = value;
                }
 
                final public function get $alpha():Number
                {
                        return super.alpha;
                }
        //                и т.д
        }
}

И если, dixlofos, вы не из разряда "сказал при устройстве на работу что знаю флеш, теперь вот нужно сделать, иначе уволят", то стоит почитать мука.


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

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