2010-08-15 7 views
0

Pour commencer, laissez-moi vous dire que je suis très novice dans le script d'action et que je n'utilise pas adobe creative suite, j'utilise le bloc-notes avec flex comme compilateur. J'ai deux classes, une classe principale et une classe appelée OBJECT_square.Comment mettre à jour des enfants dans ActionScript?

Voici la classe principale:

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); 
      } 
     } 
    } 

Voici la classe 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(); 
     } 
    } 
} 

Maintenant, mon problème est le suivant. Tout simplement je voudrais que le carré que OBJECT_square dessine se déplace vers la droite quand j'appuie sur la touche fléchée droite. À l'heure actuelle, je ne peux l'obtenir qu'une seule fois (bien que je crée deux carrés séparés dans deux endroits différents). Maintenant, la chose que je dois savoir est si j'ai utilisé correctement l'événement de clavier dans OBJECT_square. J'ai également utilisé l'événement clavier dans la classe principale pour afficher la dernière touche que j'ai pressée mais je ne suis pas sûr de savoir comment l'utiliser dans une classe autre que la principale. Aussi je ne suis pas sûr de savoir comment 'mettre à jour' le carré afin qu'il soit redessiné quand il bouge, c'est-à-dire retirer son ancien moi de la liste d'affichage et réinsérer son nouveau moi. Le tout pointe un peu sur le code: le carré doit être «autosuffisant», c'est-à-dire contenir tout le code nécessaire pour le dessiner et le déplacer plutôt que de dépendre d'une autre classe. Je le veux fondamentalement pour qu'une fois qu'une autre classe ait fait un carré, la place est capable de tout faire par elle-même.

Répondre

0

Vous n'avez pas besoin de continuer à redessiner manuellement le carré. Les sprites ont des propriétés x et y que vous pouvez modifier et qui seront automatiquement déplacées. Il n'y a pas non plus de raison de créer un sprite dans une classe qui est déjà en train d'agrandir le sprite. Il y a deux ou trois autres choses étranges que vous faites donc une version fixe en place de votre classe ressemblerait à quelque chose comme:

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); 
      } 
     } 
    } 

Vous seriez probablement mieux de créer une classe pour gérer toutes vos entrées clavier et puis modifiez la objets pertinents.

Questions connexes