|
|
|||||
Регистрация: Apr 2012
Сообщений: 88
|
Перенести код в другой класс.
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(т.е. героя?) Вообщем вопрос стоит так: Как сделать проще, что бы не нагромождать основной класс "Флешки"? |
|
|||||
Пишем отдельно класс "герой" так же пишем класс "контроллер".
Нужно манипулировать героем, передаём классу "контроллер" класс "герой" Класс "контроллер" имеет интерфейс обращения к объектам сцены, "контроллер" проверил входящий объект, а ... это объект "герой" значит рулим так, а... это объект "противник" рулим так. И так далее.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
Регистрация: Apr 2012
Сообщений: 88
|
Пишем отдельно класс "герой"(1) так же пишем класс "контроллер".(2)
(1)Что писать в классе герой, он же уже создан при экспорте клипа из библиотеки. (2) Есть такой класс. в нем. 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;} } } } } |
|
|||||
На коленке:
// интерфейс 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; } } }
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь! |
|
|||||
Регистрация: Apr 2012
Сообщений: 88
|
Спасибо тебе. Но сколько про интерфейсы я не читал, чет нихера не понял. Дремучий лес какой-то.
Пока на это забью... Добавлено через 21 минуту Сделал так ...NameFLAFile 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); } } } 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, время: 18:30. |
|
« Предыдущая тема | Следующая тема » |
|
|