2010-08-28 6 views
0

Je suis nouveau sur AS3. Apprendre à créer des cours Est-ce que comp = new HouseObjects crée une nouvelle classe? Est-ce que comp crée une instance de HouseObjects? Je me rends compte que c'est à l'intérieur de la classe publique TreeHouse. Je pense que HouseObjects, comment je l'ai mis en place n'est pas une classe ... pas sûr de la façon correcte de configurer les classes et les propriétés.Création de classes et de propriétés dans AS3

J'ai aussi remarqué que lorsque j'ai essayé de lier un autre MovieClip en utilisant le même nom de liaison HouseObjects - il a demandé d'entrer dans une classe unique. J'essaye de créer plusieurs instances de la même classe appelée HouseObjects.

alt text

package

{

import flash.display.MovieClip; 
import flash.events.MouseEvent; 
import flash.events.Event; 

public class TreeHouse extends MovieClip 

{ 

private var comp:MovieClip; 
var powerData:int; // stores user data (of selected data) 
//var currentPower:int; // stores current power 

public function TreeHouse() 
{ 
    comp = new HouseObjects; // linkage in library 
    comp.power = 2; // amount of power 
    comp.name = "comp"; 
    comp.buttonMode = true; 
     comp.bstate = 0; // button state 


    //add event listeners -- listens to functions that are called  
    comp.addEventListener(MouseEvent.MOUSE_OVER, rolloverToggle); 
    comp.addEventListener(MouseEvent.MOUSE_OUT, rolloutToggle); 
    comp.addEventListener(MouseEvent.CLICK, toggleClick); 
    comp.addEventListener(MouseEvent.CLICK, toggleClick); 

    stage.addChild(comp); // add computer to stage ----------------------------------- 
    trace("tracing..."); 
    comp.x = 100; 
    comp.y = 100; 

} 

// function rollOver -------------------------------------------------------------- 
function rolloverToggle(e:MouseEvent) {  
    if (e.currentTarget.currentFrame == 1) 
    e.currentTarget.gotoAndStop(2); 
    if (e.currentTarget.currentFrame == 3) 
    e.currentTarget.gotoAndStop(4); 
} 

// function rollOut-- --------------------------------------------------------------  
function rolloutToggle(e:MouseEvent) { 
    if (e.currentTarget.currentFrame == 2) 
    e.currentTarget.gotoAndStop(1); 
    if (e.currentTarget.currentFrame == 4) 
    e.currentTarget.gotoAndStop(3); 
} 

// function toggleClick------------------------------------------------------------- 
    function toggleClick(e:MouseEvent) { 


    // On MouseEvent gotoAndStop(Frame Number) 
    if (e.currentTarget.currentFrame == 2) 
    { 
    e.currentTarget.gotoAndStop(3); 
    e.currentTarget.bstate = 1; 
    } 

    if (e.currentTarget.currentFrame == 4) 
    { 
    e.currentTarget.gotoAndStop(1); 
    e.currentTarget.bstate = 0; 
    }  

//var powerData:int = HouseObjects[e.currentTarget.power]; // set power value 

    // Find out which object selected------------------------------------------------- 
    //trace("movieClip Instance Name = " + e.currentTarget); // [object Comp] 
    //trace(houseArray[e.currentTarget.name]); // comp 
    trace("using currentTarget: " + e.currentTarget.name); // comp 
    //trace("powerData: " + powerData); // power of user data 
    //trace("houseArray: " + houseArray[0]); // the 0 index of house array 
    trace(e.currentTarget.power); // currentTarget's power************ 


    } 

} //end of class 

} // end of package 

Répondre

0

Je ne suis pas tout à fait sûr si je comprends bien votre question. comp = new HouseObjects crée une nouvelle instance (objet) du type HouseObjects. (Un peu de recherche sur les bases de la POO vous facilitera probablement la vie.)

En ce qui concerne l'erreur »Veuillez entrer un nom de classe unique«: Vous ne pouvez pas affecter la même classe à deux symboles de bibliothèque car le symbole est relié à la classe en interne de sorte que si vous créez une nouvelle instance (var x = new HouseObjects; addChild(x);), le contenu du symbole lié est également ajouté à la liste d'affichage. S'il y avait plusieurs symboles de bibliothèque liés à la même classe, comment le compilateur Flash pourrait-il choisir celui qu'il choisirait?

0

Votre question est assez large et, comme le suggère klickverbot, il serait préférable que vous preniez un peu de temps pour comprendre les concepts de base de la POO.

Il y a beaucoup de ressources disponibles pour vous aider à démarrer avec AS3, vérifier par exemple http://tv.adobe.com/watch/colin-moocks-lost-actionscript-weekend/course-1-introduction

tutoriel de Colin Moock est très facile à suivre et vous donnera la plupart des outils dont vous avez besoin pour commencer.

0

Si vous êtes nouveau à AS3, et OOP en particulier, vous devriez vérifier Moock's Essential Actionscript 3 qui est au-delà fantastique pour une éducation étape par étape dans la POO dans AS3.

HouseObjects semble être une classe et que vous créez une nouvelle instance pour la variable comp

Vous avez une définition double. Il semble que vous essayez d'utiliser Flash Pro pour étendre HouseObjects pour le lightbulb. Cela ne fonctionne pas comme ça dans Flash Pro. Vous créez un symbole MovieClip et lui donne une définition de classe. Il doit étendre MovieClip et vous ne pouvez pas changer cela dans ce cas. Vous pouvez probablement étendre HouseObjects dans un fichier AS3 et l'utiliser dans votre application.

Personnellement pense que si vous voulez vraiment obtenir votre tête autour de la POO avec AS3 vous devriez obtenir le livre et sortir de Flash Pro. Utilisez un IDE tel que Flash Builder, FDT, Flash Develop ou IntelliJ IDEA. Il est beaucoup plus facile à comprendre lorsque vous vous éloignez des boîtes de dialogue et autres complications de l'IDE de Flash Pro:>