2013-08-30 4 views
2

Jusqu'ici j'ai été complètement perplexe et j'ai passé quelques jours, et la plupart des liens que j'ai suivis et les recherches que j'ai faites ne m'ont conduit à rien. Je voulais faire un jeu simple, avec une interface souris, mais je voulais aussi ajouter un préchargeur. Au début, j'utilisais minibuilder, car il est multi-plateforme et je suis sur Linux, mais tous les tutoriels que j'ai vu pour ajouter un préchargeur semblaient être incompatibles avec ça.Comment utiliser Actionscript "Classes" avec un fichier Flex MXML?

J'ai donc déménagé pour utiliser directement le compilateur Flex et un éditeur de texte, mais je n'ai pas eu beaucoup de chance, et même le préchargeur (qui semble être le seul qui fonctionne vraiment) est une simple copie de un tutoriel qui, par chance, a fonctionné.
Idéalement, je voudrais simplement utiliser le fichier MXML pour pointer vers le préchargeur - ayant un fichier CustomPreloader.as pour le préchargeur - et pour démarrer les classes Actionscript, en utilisant éventuellement FlashPunk avec mon code pour aider.

C'est un code à ce jour, pour chacun des fichiers à l'exception CustomPreloader.as, comme le préchargement fonctionne déjà: (Note: Tous les fichiers sont ~/ASClasses/src)

File: ASClasses.mxml 
-------------------- 
<?xml version="1.0" encoding="utf-8"?> 
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    backgroundColor="#333333" 
    creationComplete="init();" 
    width="800" height="500" 
    frameRate="60" 
    preloader="CustomPreloader" 
> 
<mx:Script> 
<![CDATA[ 

//This part is mostly for testing purposes 
//======================================== 
import mx.controls.Alert; 
public function init():void { 
    Alert.show("The first function works."); 
} 

//And this is what I actually wanted to do 
//======================================== 
import Application; 
//Whenever I uncomment the following line, some error is thrown and the init function stops working at all. 
//public var myApp:Application = new Application; 
//addChild(myApp); 

]]> 
</mx:Script> 
</mx:Application> 
File: Application.as 
-------------------- 
package{ 
    import flash.display.Shape; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 
    import flash.display.Sprite; 

    public class Application extends Sprite{ 
     public function Application(){ 
      stage.scaleMode = StageScaleMode.NO_SCALE; 
      stage.align = StageAlign.TOP_LEFT; 
      stage.frameRate = 60; 
      rotationX = -45; 
      var s:Shape = new Shape; 
      s.x = 400; 
      s.y = 200; 
      s.rotation = 90; 
      addChild(s); 
     } 
     addEventListener('enterFrame', function(e:Event):void{ 
      s.rotation += 2.5; 
     }); 
    } 
} 

Cependant, décommentant la ligne nécessaire pour ajouter Application.as semble simplement jeter une erreur, donc je pense que je suis soit manquer un code ou que j'ai fait quelque chose de mal.

Y a-t-il quelqu'un qui pourrait m'apprendre davantage à ce sujet, s'il vous plaît? Et même si je voudrais dire que j'ai une certaine expérience avec Actionscript, à ce stade, je me suis déjà tellement stressé d'être incapable de le faire que je préférerais, si ce n'est pas trop demander, être expliqué de manière simple, en supposant que je n'ai aucune connaissance préalable. De plus, s'il y a des tutoriels simples et complets pour faire un jeu/une démo simple/simpliste de cette façon, j'apprécierais aussi que la plupart des tutoriels que j'ai vus jusqu'ici ne documentent que Flex et Actionscript, et facilement se compliquer avant que je n'ai réussi à faire quoi que ce soit.

Merci d'avance.

Édition 1: Aussi, il peut être utile de mentionner que, comme il est actuellement, il parvient toujours à lancer l'alerte après le chargement.

Répondre

1

Essayez

this.rawChildren.addChild(myApp); 

Au lieu de

addChild(myApp); 

application étend conteneur, Lorsque vous ajoutez un enfant à conteneurs, l'enfant doit implémenter l'interface IUIComponent. Parce que la classe sprite n'implémente pas l'interface, il vous donnera une erreur.

Voici quelques infos sur ce Container addChild

EDIT

mettre le code d'application en ajoutant dans une fonction, comme

public function init():void { 
    Alert.show("The first function works."); 

    var myApp:Application = new Application(); 
    this.rawChildren.addChild(myApp); 
} 
+0

Merci, mais encore jeté une erreur lors de la compilation, bien que : "Erreur: ce mot clé ne peut pas être utilisé dans les méthodes statiques.Il ne peut être utilisé que dans les méthodes d'instance, les fermetures de fonction et le code global." Merci d'avoir essayé d'aider au moins, je suis vraiment à la perte de ce qu'il faut faire maintenant. – Devvie

+0

J'ai éditer la réponse, vous devriez ajouter myApp dans une fonction. – Pan

+0

Merci, cela a résolu le problème de compilation! Il y a toujours un problème avec la classe elle-même en lançant une erreur dès que je clique sur l'écran, mais j'accepterai votre réponse car elle a aidé avec le problème que j'ai posté. Encore une fois merci! – Devvie

Questions connexes