2010-08-15 2 views
0

Для начала позвольте мне просто сказать, что я очень новичок в скрипте действия, а также что я не использую adobe creative suite, я использую блокнот с flex как компилятор. У меня есть два класса: основной класс и класс OBJECT_square.Как обновить детей в ActionScript?

Вот главный класс:

package 
{ 

     import flash.display.*;  import mx.core.*;  
     import flash.events.*;  import mx.collections.*; 
     import flash.geom.*;  import mx.controls.*; 
     import flash.text.*;  import mx.events.*; 
            import mx.styles.*; 
            import mx.containers.*; 

     public class MAIN extends Sprite 
     { 
      public var APPLICATION:Application = Application(Application.application); 
      public var keyDownText:TextField = new TextField(); 
      public function MAIN() 
      { 
       stage.addEventListener(KeyboardEvent.KEY_DOWN,KEY_DOWN); 
       addEventListener(Event.ENTER_FRAME,STEP); 
       this.addChild(new OBJECT_square().CREATE(10,100,1)); 
       this.addChild(new OBJECT_square().CREATE(10,200,1)); 
      } 
      public function STEP():void {} 
      public function DRAW():void {} 
      public function KEY_DOWN(event:KeyboardEvent):void 
      { 
       keyDownText.text = "Key code: " + event.keyCode; 
       this.addChild(keyDownText); 
      } 
     } 
    } 

Вот класс OBJECT_square:

package 
{ 
    import flash.display.*; 
    import flash.events.*; 

    public class OBJECT_square extends Sprite 
    { 
     public var X:int = 0; 
     public var Y:int = 0; 
     public var DEPTH:int = 0; 
     public var SPRITE:Sprite = new Sprite(); 
     public function CREATE(X:int,Y:int,DEPTH:int):Sprite 
     { 
      addEventListener(KeyboardEvent.KEY_DOWN,KEY_DOWN); 
      this.DEPTH = DEPTH; 
      this.X = X; 
      this.Y = Y; 
      DRAW(); 
      return SPRITE; 
     } 
     public function KEY_DOWN(event:KeyboardEvent):void 
     { 
      if (event.keyCode == 39) {X += 1; DRAW();} 
     } 
     public function DRAW():void 
     { 
      SPRITE.graphics.beginFill(0xFF0000,1); 
      SPRITE.graphics.drawRect(X - 10,Y - 10,20,20); 
      SPRITE.graphics.endFill(); 
     } 
    } 
} 

Теперь моя проблема заключается в следующем. Проще говоря, мне нужен квадрат, который OBJECT_square рисует, чтобы двигаться вправо, когда я нажимаю клавишу со стрелкой вправо. Сейчас я могу получить его только один раз (хотя я фактически создаю два отдельных квадрата в двух разных местах). Теперь мне нужно знать, правильно ли я использовал событие клавиатуры в OBJECT_square. Я использовал событие клавиатуры в основном классе, чтобы отобразить последний нажатый ключ, но я не уверен, как использовать его в классе, отличном от основного. Также я не уверен, как «обновить» квадрат так, чтобы он перерисовывался, когда он перемещается, то есть удаляет его старое «я» из списка отображения и снова вставляет его новое «я». Вся точка зрения на код заключается в том, что квадрат является «самодостаточным», т. Е. Содержит весь код, необходимый для его рисования и перемещения, а не полагаться на какой-либо другой класс. Я в основном хочу, чтобы квадрат, как только один класс сделал квадрат, способен делать все остальное сам по себе.

ответ

0

Вам не нужно вручную перерисовывать квадрат. Спрайты имеют свойства x и y, которые вы можете изменить и будут автоматически перемещены. Также нет причин создавать спрайт внутри класса, который уже расширяет спрайт. Есть несколько других странных вещей, которые вы делаете это фиксированный до версии вашего класса будет выглядеть примерно так:

package 
{ 
    import flash.display.*; 
    import flash.events.*; 

    public class ObjectSquare extends Sprite 
    { 

     public function ObjectSquare (x:int,y:int):void 
     { 
      graphics.beginFill(0xFF0000,1); 
      graphics.drawRect(x,y,30,30); 
      graphics.endFill(); 
      addEventListener(KeyboardEvent.KEY_DOWN,KEY_DOWN); 

     } 
     public function KEY_DOWN(event:KeyboardEvent):void 
     { 
      if (event.keyCode == 39) 
      { 
       x += 1; 
      } 
     } 

    } 
} 



package 
{ 

     import flash.display.*;  import mx.core.*;  
     import flash.events.*;  import mx.collections.*; 
     import flash.geom.*;  import mx.controls.*; 
     import flash.text.*;  import mx.events.*; 
            import mx.styles.*; 
            import mx.containers.*; 
     //rename your class to Main. Should not be all caps 
     public class Main extends Sprite 
     { 
      public var APPLICATION:Application = Application(Application.application); 
      public var keyDownText:TextField = new TextField(); 
      public function Main() 
      { 
       stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyPress); 
       addChild(new ObjectSquare(10,100)); 
       addChild(new ObjectSquare(10,200)); 
      } 

      public function onKeyPress(event:KeyboardEvent):void 
      { 
       keyDownText.text = "Key code: " + event.keyCode; 
       this.addChild(keyDownText); 
      } 
     } 
    } 

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

Смежные вопросы