STIC Discussion:STIC I - exercice 7 (Stella)

De EduTech Wiki
Aller à la navigation Aller à la recherche

Array et déclaration de variable -- Lucie.Marchon 25 janvier 2011 à 21:30 (CET)

Bonjour! Je fais une sorte de jeu dont la base sont les réglettes de cuisenaire. Il y a dix réglettes, et à toutes sont appliquées un certain nombre de fonctions, qui se ressemblent. Je pensais que je pourrais mettre cela en array et que ça simplifierait les choses. Avec l'array définie:

var reglettes:Array=new Array(Un,Deux,Trois,Quatre,Cinq,Six,Sept,Huit,Neuf,Dix);

qui sont les classes de chaque réglettes, ça marche quand je met reglettes[1] ou reglettes[4], jusqu'à 9, mais ça ne marche plus quand je mets i,

for(var i=0;i<10;i++)
{
/*quand on clique sur le bouton un cela appelle une fonction..*/
boutons[i].addEventListener(MouseEvent.CLICK, Creer);
/*...qui crée une réglette de taille 1, à peine un peu plus loin que le bouton lui-même, avec un fonction drag et drop incorporée*/
function Creer(event:MouseEvent):void
{
    
var un = new reglettes[i];
/*une nouvelle occurrence de l'objet "un" est créée sur la scène*/
addChild(un);
/*il se comporte comme un bouton*/
un.buttonMode=true;
/*Il apparaît à peine un peu en décalage du bouton*/
un.x=50;
un.y=50;
/*on lui attribue une fonction drag and drop pour qu'on puisse le déplacer partout sur le scène*/
/*drag quand clic*/
un.addEventListener(MouseEvent.MOUSE_DOWN, Drag);
/*drop quand on relâche*/
un.addEventListener(MouseEvent.MOUSE_UP, Drop);

function Drag(evt:MouseEvent):void
{
    var object = evt.target;
    object.startDrag();
}

function Drop(evt:MouseEvent):void
{
    var object = evt.target;
        object.stopDrag();
        
        if (230 < un.y && un.y< 250)
        {un.y=240;}

        /*combine pour que la réglette se place correctement dans la case la plus proche même si on la lâche un tout petit peu à côté*/
        for(var n=0;n<12;n++)
        {
        if (190+n*40 < un.x && un.x< 230+n*40)
        {un.x=200+n*40;}
        }
}
}


}

ça me met alors "Tentative d'instanciation sur un élément non constructeur". Je ne vois pas ce que i à de moins constructeur que 3! Comment je devrais faire pour mettre ça en array?

J'ai essayé de déclarer la variable également avec une donnée mise dans une array, qui pourrait varier avec le i, mais il ne veut pas de string.

(bouton[i] est aussi une array, mais ça a l'air de bien marcher, ce sont les nom d'instance de boutons qui sont sur la scène).

Re: Array et déclaration de variable -- Daniel K. Schneider 25 janvier 2011 à 09:45 (CET)

Faut pas mettre

new reglettes

Ceci crée une nouvelle classe, alors que reglettes n'a rien d'une classe. C'est juste une variable. Bien entendu i et reglettes doivent être connus, donc à un moment donnée crées avec une instruction var

var i ....
var reglettes ...
var un = reglettes[i];

Je vois d'autres problèmes qui peuvent surgir. Je ne déclarerai pas des fonctions dans des fonctions (on peut, mais faut savoir ce qu'on fait).

Re: Re: Array et déclaration de variable -- Lucie.Marchon 25 janvier 2011 à 10:53 (CET)

Dans reglettes[i], il y a les classes, telles que définies dans les propriétés des clips pour l'export actionscript. Je ne vois pas bien la différence entre faire

var un = new Un

ou même

var un = new reglettes[1]

et

var un = new reglettes[i]

car dans le tableau reglettes sont répertoriées les classes Un, Deux, Trois, Quatre, etc.(ce sont les différentes réglettes de taille un à dix et de couleurs différentes)


Mais bon, j'ai essayé de plusieurs manières et ce qu'il se passe maintenant, c'est qu'il y a le message suivant: "Le paramètre child ne doit pas être nul"

Pourquoi je déclare la variable dans la classe? Je me suis battue la dernière fois avec mes champignons. Si je déclarais la variable hors de la classe, je ne pouvais générer qu'un champignon: quand je recliquais sur le bouton, le premier champignon disparaissait et un nouveau était créé. Je veux absolument pouvoir générer plusieurs reglettes, sinon l'exercice n'a pas de sens.