Forums Développement Multimédia

Aller au contenu

lier plusieurs symboles à la même super-classe avec paramètres

CODE

9 réponses à ce sujet

#1 web-dro

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 71 messages

Posté 09 December 2014 - 22:40 PM

Bonjour,

j'ai plusieurs symboles qui sont liés à une même super-classe. Le problème est que je voudrais passer des paramètres au constructeur de cette super-classe mais flash ne veux pas, sous prétexte, je suppose, que tout ce petit monde surclasse Sprite!

le message d'erreur :
1136 : Nombre d'arguments incorrect. 0 attendus.

Les 2 symboles ont des classes liées différentes mais la même classe de base BoutonIcone :

public class BoutonIcone extends Sprite {
  /**
   * Constructeur
   */

  private var clicFunction:Function;
  public var indice:uint;

  function BoutonIcone(x:Number, y:Number, indice:uint, clicFunction:Function) {
   Main.occurrence.addChild(this);
   this.x = x;
   this.y = y;
   this.indice = indice;
   this.clicFunction = clicFunction;
   filters = Design.FILTER_OUT;
   active();
  }
 

Elles sont instanciées comme ceci :

if (tabTest[i][j].@saisie==1) {
          var boutPDF:BoutonIcone = new BoutonPDF(testText.x + 60, testText.y, tabTest[i][j].@numero, clicPdf);
         }
         else {
          var boutFill:BoutonIcone = new BoutonFill(testText.x + 60, testText.y, tabTest[i][j].@numero, clicSaisie);
         }
 
BoutonPDF et BoutonFill étant leur nom de classe liée.

Merci de votre aide.
Si le passage de paramètres n'est pas possible, je ferais une initialisation de ces paramètres après instanciation !! tant pis!
Image IPB
contact@web-dro.com
15 rue des templiers
30210 COLLIAS
portable : +33 (0)6 09 94 14 44
Tél/Fax : +33 (0)4 11 83 77 18

#2 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 6956 messages

Posté 10 December 2014 - 00:19 AM

Salut,

Tu as essayé la méthode Super() pour appeler le constructeur de la classe mère, par exemple :


function BoutonPDF(x:Number, y:Number, indice:uint, clicFunction:Function) {
   super(x,y,indice,clicFunction);
   //...
}
 
function BoutonFill(x:Number, y:Number, indice:uint, clicFunction:Function) {
   super(x,y,indice,clicFunction);
   //...
}
 


A mon avis Flash ne veux pas tout simplement parce que, lorsque tu appelle le constructeur de ces classes, il n'y a effectivement aucun paramètre de renseignés... Mais rien n'empêche de récupérer ces paramètres pour les transmettre au constructeur de la mère.

#3 pol2095

  • Members
  • PipPipPipPipPipPipPipPip
  • 1683 messages

Posté 10 December 2014 - 12:02 PM

c'est bizarre

il manque public devant le constructeur "function BoutonIcone(x:Number, y:Number, indice:uint, clicFunction:Function)"

#4 web-dro

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 71 messages

Posté 10 December 2014 - 12:35 PM

non, parce que je ne voulais pas créer ces 2 classes. Elles ont exactement les mêmes propriétés donc je basculais tout dans une super classe.La solution serait d'instancier sans paramètres et de les initaliser juste après :

if (tabTest[i][j].@saisie==1) {
                  var boutPDF:BoutonIcone = new BoutonPDF();
boutPDF.initialize(testText.x + 60, testText.y, tabTest[i][j].@numero, clicPdf);
                 }
                 else {
                  var boutFill:BoutonIcone = new BoutonFill();
boutFill.initialize(testText.x + 60, testText.y, tabTest[i][j].@numero, clicPdf);
                 }
 

mais je voulais faire plus propre.
Image IPB
contact@web-dro.com
15 rue des templiers
30210 COLLIAS
portable : +33 (0)6 09 94 14 44
Tél/Fax : +33 (0)4 11 83 77 18

#5 web-dro

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 71 messages

Posté 10 December 2014 - 12:37 PM

Oui effectivement il manquait l'attribut public, mais après rajout, ça ne change rien. C'est le problème du nombre de paramètres entre la super-classe et les sous-classes créées par Flash automatiquement qui merde.
Image IPB
contact@web-dro.com
15 rue des templiers
30210 COLLIAS
portable : +33 (0)6 09 94 14 44
Tél/Fax : +33 (0)4 11 83 77 18

#6 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 10 December 2014 - 12:46 PM

Hello.

Pour simplifier, tu pourrais sans doute faire :
var bout:BoutonIcone;
if (tabTest[i][j].@saisie==1) {
  bout = new BoutonPDF();
} else {
  bout = new BoutonFill();
}
bout.initialize(testText.x + 60, testText.y, tabTest[i][j].@numero, clicPdf);


#7 web-dro

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 71 messages

Posté 10 December 2014 - 16:30 PM

non, en fait dans le dernier post, il y a une erreur :


if (tabTest[i][j].@saisie==1) {
                                  var boutPDF:BoutonIcone = new BoutonPDF();
boutPDF.initialize(testText.x + 60, testText.y, tabTest[i][j].@numero, clicPdf);
                                 }
                                 else {
                                  var boutFill:BoutonIcone = new BoutonFill();
boutFill.initialize(testText.x + 60, testText.y, tabTest[i][j].@numero, clicSaisie);
                                 }

 
Le design des 2 boutons eest différent et ils appelelnt aussi des fonctions différentes.
Image IPB
contact@web-dro.com
15 rue des templiers
30210 COLLIAS
portable : +33 (0)6 09 94 14 44
Tél/Fax : +33 (0)4 11 83 77 18

#8 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 10 December 2014 - 17:23 PM

OK.
En fait, tu passes une fonction callback différente pour chaque type de bouton ?
Le principe me parait un peu tordu, mais je n'arrives pas à dégager une vision d'ensemble, donc pas mieux…

Ou alors, en passant par une classe non graphique composant avec des classes sœurs ? Ça te permettrait de garder le contrôle de l'instanciation ?

(vois-tu de quoi je parle ?)

#9 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 10 December 2014 - 17:47 PM

Exemple en pièce jointe.

Fichier(s) joint(s)

  • Fichier joint  test.zip   8.84 Ko   3 téléchargement(s)


#10 web-dro

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 71 messages

Posté 10 December 2014 - 19:44 PM

oui, ça c'est bien, de passer la classe en paramètre (je pensais pas qu'il suffisait seulement de passer cette classe que pour le addchild() et pas de l'instancier avant.

Sinon, pour les paramètres, j'ai aussi remarqué qu'un symbole pour lequel la classe était renseigné mais pas la classe de base permettait de passer des paramètres à condition que cette classe surclasse MovieClip ou Sprite.Donc, pour 1 classe qui surclasse MovieClip, ça marche.
Mais plusieurs classes (associées à plusieurs symboles) qui surclassent une classe perso qui surclasse, elle, MovieClip, c'est plus compliqué!!
Ta solution, en tout cas est bien.

Merci à toi et à Monsieur SPi
Image IPB
contact@web-dro.com
15 rue des templiers
30210 COLLIAS
portable : +33 (0)6 09 94 14 44
Tél/Fax : +33 (0)4 11 83 77 18



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