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

Mkey 17.05.2012 21:10

Перенести код в другой класс.
 
Код AS3:

package{
        import flash.display.*;
        import flash.events.*;
        public class LifeArena extends MovieClip
        {
                >public var Hero:HeroMan=new HeroMan();
 
                public function LifeArena()
                {
                        >addChild(Hero);
                        >stage.addEventListener(KeyboardEvent.KEY_DOWN,Cont);
                        >function Cont(e:KeyboardEvent)
                        >{
                        >        if(e.keyCode==37)
                        >        {Hero.x-=5;}else if(e.keyCode==39){Hero.x+=5;}
                        >        else if(e.keyCode==38){Hero.y-=5;}
                        >        else if(e.keyCode==40){Hero.y+=5;}
                        >}
                }
 
        }
 
}

Моя цель засунуть управление героем в другой класс.
Как это сделать?:)
Писать код который выделен стрелками ">" в конструкторе объекта HeroMan или создать отдельный класс?
Ну вообщем я делал в отдельном классе, а пока писал дошло:" А почему бы не написать этот код в классе HeroMan(т.е. героя?)

Вообщем вопрос стоит так: Как сделать проще, что бы не нагромождать основной класс "Флешки"?

stweet 17.05.2012 21:29

Пишем отдельно класс "герой" так же пишем класс "контроллер".
Нужно манипулировать героем, передаём классу "контроллер" класс "герой"
Класс "контроллер" имеет интерфейс обращения к объектам сцены,
"контроллер" проверил входящий объект, а ... это объект "герой" значит рулим так,
а... это объект "противник" рулим так. И так далее.

Mkey 17.05.2012 21:37

Пишем отдельно класс "герой"(1) так же пишем класс "контроллер".(2)
(1)Что писать в классе герой, он же уже создан при экспорте клипа из библиотеки.
(2) Есть такой класс.
в нем.
Код AS3:

package{
        import flash.display.*;
 
        import flash.net.*;
 
          import flash.events.*;
 
 
        public class HeroControl extends MovieClip{
 
 
                ///Конструктор
                public function HeroControl()
                {
                var Hero:HeroMan=new HeroMan();
                addChild(Hero);
                Hero.x=100;
                Hero.y=100;
                Hero.addEventListener(KeyboardEvent.KEY_DOWN,Cont);
                        function Cont(e:KeyboardEvent)
                        {
                                if(e.keyCode==37)
                                {Hero.x-=5;trace("Work");}else if(e.keyCode==39){Hero.x+=5;}
                                else if(e.keyCode==38){Hero.y-=5;}
                                else if(e.keyCode==40){Hero.y+=5;}
                        }
                }
        }
 
 
 
 
 
 
}

Вызываю его в основном классе, ничего не происходит, даже Объекта "Hero" не видно, но при проверке он имеет заданный координаты.

stweet 17.05.2012 22:20

На коленке:

Код AS3:

// интерфейс
package 
{
        public interface IMoveObject {
 
                function xMove(i:int):void;
                function yMove(i:int):void;
 
                function set speed (value:Number):void ;
                function get speed ( ):Number ;
        }
}
 
// Hero
package 
{
        import flash.display.Sprite;
 
        public class Hero extends Sprite implements IMoveObject
        {
                private var _speed:int;
 
                public function Hero ( ) {
                        graphics.beginFill(0xFF8040);
                        graphics.drawCircle(0, 0, 20);
                        graphics.endFill( );
                }
 
                /* INTERFACE IMoveObject */
 
                public function xMove(i:int):void { x += i; }
                public function yMove(i:int):void { y += i; }
 
                public function set speed(value:Number):void { _speed = value; }
                public function get speed( ):Number { return _speed; }
        }
}
 
// controller
package 
{
        import flash.display.Stage;
        import flash.events.KeyboardEvent;
        import flash.events.TimerEvent;
        import flash.utils.Timer;
 
        public class Controller
        {
                private var object:IMoveObject;
                private var timer:Timer;
                private var stage:Stage;
 
                private const LEFT:int = 37;
                private const TOP:int = 38;
                private const RIGHT:int = 39;
                private const BOTTOM:int = 40;
 
                private var moveLeft:Boolean;
                private var moveTop:Boolean;
                private var moveRight:Boolean;
                private var moveBottom:Boolean;
 
 
 
                public function Controller (stage:Stage, object:IMoveObject) {
                        this.object = object;
                        this.stage = stage;
                        timer = new Timer(10);
                }
 
 
 
                private function onTimerEvent(e:TimerEvent):void {
                        if (moveLeft) object.xMove(-object.speed);
                        if (moveRight) object.xMove(object.speed);
                        if (moveTop) object.yMove(-object.speed);
                        if (moveBottom) object.yMove(object.speed);
                }
 
 
 
                private function onKeyUp(e:KeyboardEvent):void {
                        switch(e.keyCode) {
                                case LEFT: moveLeft = false; break;
                                case TOP: moveTop = false; break;
                                case RIGHT: moveRight = false; break;
                                case BOTTOM: moveBottom = false; break;
                                default : return;
                        }
                }
 
 
 
                private function onKeyDown(e:KeyboardEvent):void {
                        switch(e.keyCode) {
                                case LEFT: moveLeft = true; break;
                                case TOP: moveTop = true; break;
                                case RIGHT: moveRight = true; break;
                                case BOTTOM: moveBottom = true; break;
                                default : return;
                        }
                }
 
 
 
                public function set interactiv (value:Boolean):void {
                        if (value) {
                                timer.addEventListener(TimerEvent.TIMER, onTimerEvent);
                                stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
                                stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
                                timer.start( );
                        } else {
                                timer.stop( );
                                timer.removeEventListener(TimerEvent.TIMER, onTimerEvent);
                                stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
                                stage.removeEventListener(KeyboardEvent.KEY_UP, onKeyUp);
                        }
                }
        }
}
 
// Main
package 
{
        import flash.display.Sprite;
 
        public class Test2D extends Sprite
        {
 
                public function Test2D ( ) {
 
                        var hero:Hero = new Hero( );
                                hero.speed = 10;
                                hero.x = 100;
                                hero.y = 100;
                        addChild(hero);
 
                        var control:Controller = new Controller(stage, hero);
                                control.interactiv = true;
                }
        }
}


Mkey 17.05.2012 23:15

Спасибо тебе. Но сколько про интерфейсы я не читал, чет нихера не понял. Дремучий лес какой-то.
Пока на это забью...

Добавлено через 21 минуту
Сделал так :)
...NameFLAFile
Код AS3:

package{
        import flash.display.*;
        import flash.events.*;
        public class LifeArena extends MovieClip
        {
 
 
                public function LifeArena()
                {
                var Heroc:HeroControl=new HeroControl();
                addChild(Heroc.Hero);
                stage.addEventListener(KeyboardEvent.KEY_DOWN,Heroc.Cont);
                }
 
        }
 
}

...HeroControl
Код AS3:

package{
        import flash.display.*;
 
        import flash.net.*;
 
          import flash.events.*;
 
 
        public class HeroControl extends MovieClip{
                public var Hero:HeroMan=new HeroMan();
                ///Конструктор
                public function HeroControl()
                {
 
                }
                public function Cont(e:KeyboardEvent)
                        {
                                if(e.keyCode==37)
                                {Hero.x-=5;}else if(e.keyCode==39){Hero.x+=5;}
                                else if(e.keyCode==38){Hero.y-=5;}
                                else if(e.keyCode==40){Hero.y+=5;}
                        }
                }
        }



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

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