Forums Développement Multimédia

Aller au contenu

- - - - -

Classe et affichage d'occurences

Classe et affichage doccuren POO

2 réponses à ce sujet

#1 philippeonline

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 102 messages

Posté 07 September 2014 - 21:09 PM

Bonjour, j'ai une erreur 1180: Appel à une méthode qui ne semble pas définie, addChild avec le code ci dessous.

Je souhaite afficher l'occurence "BtPlay" qui se trouve dans la classe MenuPrincipal depuis la classe EcranTitre !

Dans ma classe EcranTitre j'ai une fonction dans laquel se trouve :




//Execute la methode afficheMenuPrincipal de la classe MenuPrincipal
MenuPrincipal.afficheMenuPrincipal();
 

le trace("Affichage du Menu principal"); marche mais pas l'affichage de l'occurence...


package  {

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

public class MenuPrincipal extends MovieClip {


public static const btPlay:DisplayObject = new BtPlay(); //le BtPlay pour debuter la partie.


public function MenuPrincipal() { // constructor code



}

public static function afficheMenuPrincipal():void
{
trace("Affichage du Menu principal");

addChild(btPlay);
btPlay.x = 512;
btPlay.y = 384;

}

}

}


Merci pour votre aide.

#2 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 08 September 2014 - 08:36 AM

Bonjour philippe.
C'est juste que tu ne situe pas bien ce que sont les fonctions statiques.
Elles sont définies au niveau conceptuel de la classe, au lieu d'être définies par les occurrences.
Et c'est ce qui te causes un souci :
- une occurrence de ta classe MenuPrincipal saurait faire un addChild.
- la classe elle même ne sait pas faire un addChild : la classe n'est pas un élément d'affichage.
Pour que ça fonctionne, il faudrait, soit :
- dans ta fonction statique, que tu demandes à une occurrence d'afficher le bouton :
public static function afficheMenuPrincipal():void
{
   trace("Affichage du Menu principal");
   monMenuPrincipal.addChild(btPlay); // A condition que monMenuPrincipal soit défini auparavant
   btPlay.x = 512;
   btPlay.y = 384;
}
- soit que ta fonction ne soit pas déclarée en statique :
public function afficheMenuPrincipal():void
{
   trace("Affichage du Menu principal");
   addChild(btPlay); // A condition que monMenuPrincipal soit défini auparavant
   btPlay.x = 512;
   btPlay.y = 384;
}

Je crois que tu dois encore creuser ces notions de classe/occurrence et statique/non statique pour bien comprendre à quel niveau intervient ton code. Mon avis, c'est que tant que tu n'es pas à l'aise tu devrais te passer des statiques pour travailler uniquement au niveau des occurrences. C'est plus simple, et pour moi, ça suffit pour faire ce que tu cherches à faire.

#3 philippeonline

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 102 messages

Posté 08 September 2014 - 19:23 PM

Bonsoir Dldler,

Merci pour ces precisions. Finalement j ai procede autrement : De memoire car j ai pas le code sous les yeux. (clavier DE aussi)
j ai cree une instance de la classe MenuPrincipal


//---------------Dans la classe EcranTitre---------------------

import MenuPrincipal; //importation de la classe MenuPrincipal pour pouvoir l utiliser dans la classe EcranTitre

var menuPrincipal:MenuPrincipal = new MenuPrincipal(); // creation d une instance de la classe MenuPrincipal

addChild(menuPrincipal); // Ajout a la liste des choses a afficher.

menuPrincipal.afficheMenuPrincipal(); // execute la methode afficheMenuPrincipal de la classe menuPrincipal.
 

Ca marche, cependant j espere que c est correct dans l esprit... L idee etant d avoir le code de l ecran titre dans une classe et celui du menu principal dans une autre.
Par ex d executer la fonction qui va afficher les occurences du menu principal, et qui se trouve dans la classe menu principal depuis la classe EcranTitre au moment venu, (lors du clic sur une occurence qui est affiche depuis la classe EcranTitre);

J ai un code d un jeux qui fonctionne et que je souhaite maintenant ecrire avec des classes. (au final pour pouvoir utiliser le frameworks Starling et rendre mon jeux fluide sur tablette).




Répondre à ce sujet



  

1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP