2010-08-14 10 views
0

J'écris en actionscript pur dans le bloc-notes avec flex en tant que compilateur. Voici le code que j'aientrée au clavier avec 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 FRAME:int = 0; 
    public function MAIN() 
    { 
    addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); 
    STEP(); 
    } 
    public function STEP():void 
    { 
    FRAME ++; 
    STEP(); 
    } 
    public function keyDownHandler(event:KeyboardEvent):void 
    { 
    var keyDownText:TextField = new TextField(); 
    keyDownText.text = "Key code: " + event.keyCode; 
    this.addChild(keyDownText); 
    } 
} 
} 

Ce que je veux est pour quelque clé que je suis d'appuyer pour tirer sur l'écran (mais en fait je pense que ce serait seulement le nombre ascii correspond à mais n'a pas d'importance). En ce moment même si tout est vide. Une autre chose est parce que je n'utilise pas de mxml, je ne sais pas si j'ai établi la boucle de jeu correctement alors laissez-moi savoir si cela doit être corrigé.

Répondre

1

Essayez

stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); 

au lieu de

addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); 

Depuis votre Sprite ne dispose pas d'une zone visible, il ne recevra pas au clavier ou de la souris.

La fonction STEP() provoque également un stackoverflow car elle est infidèle récursive.

Si vous voulez une boucle principale qui est appelée périodiquement, essayez d'utiliser un gestionnaire ENTER_FRAME ou un temporisateur.

Quelque chose comme ceci:

public function MAIN() 
{ 
    addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); 
    addEventListener(Event.ENTER_FRAME,STEP); 
} 

private function STEP(e:Event):void { 
    FRAME++; 
} 

Pour l'arrêter, faire ceci:

removeEventListener(Event.ENTER_FRAME,STEP); 

Je ne sais pas pourquoi vous utilisez MAJUSCULES pour certaines méthodes et les variables. Bien que ce ne soit pas une exigence de langue, toutes les majuscules sont généralement réservées aux constantes. Les noms de méthodes utilisent camelCase. Et les types utilisent PascalCase (comme camelCase, mais la première lettre est en majuscule). Donc, votre classe serait principale, FRAME serait le fram, STEP serait l'étape, etc. Vous feriez mieux de vous en tenir à ces schémas de nommage communs, je pense.

Et une autre chose. Vous ne devriez probablement pas créer une nouvelle instance de TextField chaque fois que vous voulez sortir du texte. Un textfield le fera dans votre cas, je pense. Donc, créez et ajoutez le champ de texte sur un type de méthode init que vous appelez lorsque vous démarrez votre classe, puis utilisez simplement la propriété text de ce champ de texte pour écrire vos messages.

Questions connexes