Forums Développement Multimédia

Aller au contenu

classe

CODE Actionscript

19 réponses à ce sujet

#1 premierPas

    Ceinture Jaune

  • Members
  • PipPip
  • 22 messages

Posté 20 October 2011 - 19:12 PM

coucou les loulou c'est encore moi ^^

j'ai encore un problème que je ne comprends pas et je vous remercie d'avance de vos répondre (avec patience, par ce qu'avec moi ^^)
je tiens a préciser que ce que je recherche n'est pas une solution mais une explication "du pourquoi du comment"

alors j'ai un programme qui utilise une fonction "tire" qui nous ammène dans une classe "missile" ce qui nous donne :

var m:missile = new missile();
m.tire(iron)//iron est un vaisseau
 

puis on arrive donc dans la classe "missile"

package  {
       
        import flash.display.MovieClip;
       
       
        public class missile extends MovieClip
        {
                var max_missile:int = 6;
                var nb_missile:int = 0;
                var tabMissile:Array = new Array(max_missile);
               
                public function tire(iron:ironChouquette)
                {
                       
                        this.x=iron.x +iron.width/2 - this.width/2;
                        this.y=iron.y - this.height;
                        nb_missile = nb_missile +1 ;
                        tabMissile[nb_missile]= this;
                        stage.addChild(tabMissile[nb_missile]);
                }
        }
}

or quand j'utilise espace (ce qui nous fait venir à créer m:missile) j'ai ce message d'erreur...
TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
at missile/tire()
at commencerJeu/mouvIron()

et voilà... je sais pas vraiment pourquoi j'ai ça par ce que justement tabMissile[nb_missile] n'est pas vide... bref j'aimerais que vous m'éclairiez de votre science

merci bien ;)

#2 Goabonga

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2724 messages

Posté 20 October 2011 - 19:17 PM

explication quand tu fais :

new missile()

il execute le code dans le constructeur.

dans ce constructeur tu demande a acceder au stage mais le stage n'existera qu'une fois le missile ajouter a la liste d'affichage.

donc une methode simple pour prevenir ce genre de problème est de prendre l'habitude de faire :

package {
        import flash.events.Event;
        import flash.display.Sprite;

        public class Main extends Sprite {
                public function Main() {
                        if (stage) added();
                        else addEventListener(Event.ADDED_TO_STAGE, added);
                }

                protected function added(event : Event = null) : void {
                        if (event) removeEventListener(Event.ADDED_TO_STAGE, added);
                        // la ton stage existe
                }
        }
}
 

@+

#3 premierPas

    Ceinture Jaune

  • Members
  • PipPip
  • 22 messages

Posté 20 October 2011 - 21:38 PM

merci bien pour ta réponse :)

mais je n'ai pas du tout compris ce que tu as fait... et moi utiliser du code que je ne comprends pas ça ne m’intéresse pas ^^ une petite explication de ce que tu fais ? il n'y as pas une façon plus simple non plus ?

#4 thot

    Ceinture Noire

  • Moderateur
  • PipPipPipPipPipPipPip
  • 328 messages

Posté 20 October 2011 - 21:50 PM

*** Tiens à préciser qu'il a passé une journée de merde ***

Je vais faire mon chieur mais RTFM :roll:.

Ou plus sérieusement, si tu ne comprends pas le code plus haut c'est qu'il te manque quelques bases essentielles à la programmation en flash ( je ne parle même pas de POO mais bien de l'API Flash en soi et surtout du concept de display list ).

Le mieux pour cela serait encore de (re?)lire l'excellent ebook gratuit de Thibault Imbert disponible en libre téléchargement sur son site "bytearray.org".

La réponse peut paraître rude en soi mais je pense sincèrement que c'est la meilleure solution car tu ne pourras saisir pleinement ce code qu'en comprenant dans son intégralité le concept de display list ainsi que la propagation des événements dans flash.

En espérant t'avoir un peu aidé ;-)

*** Tiens à préciser qu'il a passé une journée de merde ***

#5 premierPas

    Ceinture Jaune

  • Members
  • PipPip
  • 22 messages

Posté 20 October 2011 - 21:55 PM

package {
        import flash.events.Event;
        import flash.display.MovieClip;

        public class missile extends MovieClip
                {
                public function missile()
                                {
                        if (stage) added();
                        else addEventListener(Event.ADDED_TO_STAGE, added);
                }

                protected function added(event : Event = null) : void
                                {
                        if (event) removeEventListener(Event.ADDED_TO_STAGE, added);
                        // la ton stage existe
                }
                               
                                var max_missile:int = 6;
                                var nb_missile:int = 0;
                                var tabMissile:Array = new Array(max_missile);
                               
                                public function tire(iron:ironChouquette)
                                {
                                       
                                        this.x=iron.x +iron.width/2 - this.width/2;
                                        this.y=iron.y - this.height;
                                        nb_missile = nb_missile +1 ;
                                        tabMissile[nb_missile]= this;
                                        trace(tabMissile[nb_missile]);
                                        stage.addChild(tabMissile[nb_missile]);
                                        trace(tabMissile[nb_missile]);
                                }
        }
}

donc si je fais sa c'est que j'ai rien compris alors par ce que ça marche pas

Modifié par premierPas, 20 October 2011 - 21:56 PM.


#6 premierPas

    Ceinture Jaune

  • Members
  • PipPip
  • 22 messages

Posté 22 October 2011 - 21:05 PM

personne ne sais ? pourquoi la solution que m'a donné goabonga que j'ai appliqué dans mon package ne marche pas ?

et aussi si quelqu'un pouvais me donner ce dont me parle thoutmosis mais en français ^^

merci d'avance ;)

#7 Billyben

    KlouChiPonshoñistäs

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2597 messages

Posté 23 October 2011 - 10:52 AM

Salut, ça va revenir aux commentaires précédents :
 public function tire(iron:ironChouquette)
                {
                       
                        this.x=iron.x +iron.width/2 - this.width/2;
                        this.y=iron.y - this.height;
                        nb_missile = nb_missile +1 ;
                        tabMissile[nb_missile]= this;
                        stage.addChild(tabMissile[nb_missile]);
                }
et
stage.addChild(XXX);
implique nécessairement que "this" (soit l’occurrence de missile) soit déjà sur la scène (la propriété stage n'étant "remplie" que lorsque l'objet est dans la liste d'affichage principale.).
Or tu l'ajoute justement dans :
stage.addChild(tabMissile[nb_missile]);

Donc ça ne peux fonctionner.

#8 premierPas

    Ceinture Jaune

  • Members
  • PipPip
  • 22 messages

Posté 23 October 2011 - 21:27 PM

merci mais ça je l'avais bien compris maintenant ;)

ce que j'aimerais comprendre c'est pourquoi en ayant intégré le bout de programme de goabonga à mon code ça ne marche quand même pas... et si c'est possible j'aurais aimé avoir un site (en français) ou je pourrais comprendre le code de goabonga

#9 Billyben

    KlouChiPonshoñistäs

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 2597 messages

Posté 24 October 2011 - 06:53 AM

Re,

C'est toujours le même problème. Il faut comprendre ce que fait le code que tu as....

ADDED_TO_STAGE te permet dde savoir quand un objet est ajouté à la liste d'affichage principale.
Là tu lui dis : attend d'être ajouté à la liste d'affichage pour... ben rien, ta fonction ne fais qu'enlever l'écouteur.
Mais dans ta fonction "tire", le stage n'existe pas puisque c'est dans cette fonction que tu ajoutes ton objet au stage (condition pour que la propriété "stage" de ton objet soit "rempli"). La solution de Goa n'est pas fonctionnelle dans ton cas, car ton objet s'ajoute lui même au stage. Par ailleurs, il serait probablement mieux que ce ne soit pas le cas, mais l'objet qui gère les missiles qui l'ajoute au stage.

#10 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 24 October 2011 - 10:25 AM

yop,

Salut Premier pas :)

j'ai longuement hésité à la ramener sur cette conversation qd Goa a posé le code, pcq ta conception même me semble super chelou, jusqu'au nommage des variables.

j'avais rédigé une mega réponse que j'ai ensuite effacée.


Citation

mais je n'ai pas du tout compris ce que tu as fait... et moi utiliser du code que je ne comprends pas ça ne m’intéresse pas
mais ça, ça me va droit au cœur, et si ton souci c'est de comprendre, je suis d'accord pour qu'on s'y atèle ;)


tu utilses ton code comme suit :

var m:missile = new missile();
m.tire(iron)//iron est un vaisseau

donc ce sont les missiles qui tirent des vaisseaux ? O.O

et puis ds la classe missile :

var tabMissile:Array = new Array(max_missile);

ce qui implique que chaque missile dispose d'un nombre maximum de… missiles ? :shock:


quant à la méthode tire, traduit en français :


// quand on tire un vaisseau depuis un missile… (<img src='http://flash.mediabox.fr/public/style_emoticons/<#EMO_DIR#>/icon_wink.gif' class='bbc_emoticon' alt=';-)' />)
public function tire(iron:ironChouquette)
                {
                        // déplacer le vaisseau
                        this.x=iron.x +iron.width/2 - this.width/2;
                        this.y=iron.y - this.height;
// imaginons que je tire une première fois
                        nb_missile = nb_missile +1 ;//nb_missile vaut 1 (donc index zéro ? sert à rien ?
                        tabMissile[nb_missile]= this; // le missile se met lui même dans son propre tableau (ce sera pareil à chaque "tire de vaisseau",
                                                      // tu ajouteras au tableau de l'objet missile… lui même… s'il le faut six fois… O.O
                        stage.addChild(tabMissile[nb_missile]);// puisque tabMissile[nb_missile] vaut this…
                                                               // pourquoi pas stage.addChild(this)
                }


 


Ceci décortiqué, il n'en reste pas moins que ce n'est probablement pas au missile de s'auto-ajouter à la scène

Si quelqu'un doit ajouter (visuellement) un objet d'affichage, c'est plutôt le vaisseau qui doit s'en charger, quand il tire ;)

genre :


vaisseau.tire("Mv_Missile",plateau)
 

où "Mv_Missile" serait le nom d'un symbole, et plateau un clip où ajouter le dit missile - quitte à ce que ce clip soit le scenario principal (mainTimeLine) donc root.

ce qui serait carrément propre c'est de convenir - si un vaisseau peut tirer plusieurs types de "munitions" - de se fabriquer une interface IMunition afin de pouvoir faire en sorte que les vaisseaux tirent n'importe quoi pourvu que ce soit du "genre munition".

Avant de se lancer ds les grandes manœuvres, il faut revoir la conception de ton jeu (ou la terminologie)
Je te propose :

• une classe vaisseau qui étende MovieClip (on les verra les vaisseaux, ce seront donc des objets d'affichage… affichés) que tu associeras à des symboles clip de la bibli (vaisseaux).
Cette classe expose une méthode tire qui attend un missile et un endroit où tirer : un nom de symbole et le plateau de jeu

• une classe missile, même combat : elle étend MovieClip (ou peut-être Sprite) et tu y associes les symboles missiles de la bibli de ton choix


à l'utilisation la classe vaisseau, quand on sollicite sa méthode tire, génère un nouveau missile (instancie), l'ajoute au plateau (addChild) et le déplace (utilise la méthode du missile qui va bien : c'est le missile qui se déplace, c'est son action, donc sa méthode)

:)


[edit]
Quand je parle d'associer un symbole et une classe je parle de ça ;)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#11 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 24 October 2011 - 11:34 AM

Et d'ailleurs…

… tada !…

Ce que je te propose, c'est qu'on le fasse ensemble. Qu'on se fasse une "maquette", qu'on se développe le principe ensemble depuis de nouveaux fichiers, pour qu'une fois le principe approprié tu puisses le boulonner à ton code.

Quand je dis ensemble c'est : on en papote, moi avec la voix et la vid, toi comme tu voudras (à l'écrit et sans cam si tu veux), je défouraille le .fla les .as, et je fais ce que je te raconte, en même temps que toi. Ds la marche on s'adapte à ce que tu souhaites, si ça ne roule pas comme tu veux, tu me montres ton écran…
On fait ensemble quoi. On joue aux cubes tranquille.

Ma métaphore ne te parle pas ?
C'est que tu n'as pas suivi ces deux sujets ici et

En résumé, si ça te dit, tu me dis quand ça t'arrange (pas avant midi mais aussi tard que tu le souhaites ;)) et quel jour (moi je suis partante dès aujourd'hui), tu nous laisses une heure pour caler ce qu'il y a à caler en coulisse, et zou ! On se fait du vaisseau, du missile et du vaisseau qui tire du missile \o/

Et qui a envie de faire la guerre des étoile avec nous : bienvenue :)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#12 premierPas

    Ceinture Jaune

  • Members
  • PipPip
  • 22 messages

Posté 24 October 2011 - 14:14 PM

:shock: Ouaaaaah mais c'est génail de faire des choses comme ça ^^ :Hola:

par contre je suis en L2 informatique et la je suis en plein dans mes révisions donc j'ai moyennement le temps de me lancer dans un truc en auto-didact... parcontre dans 2 semaines je serais libre es ce que toi tu pourras quand même me renseigner dans cette periode là ?

#13 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 24 October 2011 - 14:52 PM

Avec grand plaisir ! :)

le rendez vous sera sur la base hebdo (pour commencer) le mercredi midi, sauf rendez vous spécifiques, auquel cas pourquoi se contraindre du calendrier si on peut faire autrement.

Pour toi ce serait donc la semaine du 5 au 11 ?

On va se cadrer en MP, mais je bloque l'option, et du coup j'aurai même un peu de temps pour préparer un truc moins "à l'arrache" ;)

\o/
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#14 premierPas

    Ceinture Jaune

  • Members
  • PipPip
  • 22 messages

Posté 24 October 2011 - 15:04 PM

Oui du 5 au 11 ça serais parfait :P

#15 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 24 October 2011 - 15:07 PM

reste plus qu'à me dire ce qui te convient comme jour et heure et, pour peu que ça m'aille aussi, hop ! Sur nos tablettes respectives, une bonne chose de faite ! :)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#16 premierPas

    Ceinture Jaune

  • Members
  • PipPip
  • 22 messages

Posté 24 October 2011 - 15:26 PM

ben je suis pas sur des dates encore par ce que j'ai des cours qui changent de place ces temps-ci mais surement le 5 et 6 vu qu'on est en week-end ça devrait le faire. Le seul souci c'est si ma conjointe en a décider autrement ^^

#17 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 24 October 2011 - 15:48 PM

Voir le messagepremierPas, le 24 October 2011 - 15:26 PM, dit :

ben je suis pas sur des dates encore[…] 5 et 6 vu qu'on est en week-end ça devrait le faire.

Ok, quand tu sauras, repasse faire signe.

un week-end c'est pas mal non plus ça permettra d'expérimenter différents créneaux.
En revanche je présume qu'il s'agit d'une coquille tu voulais dire 'ou' ;)

Citation

si ma conjointe en a décider autrement ^^
♯ ♭♪ Ah les filles ♬ ah les filles ♩♫ :mrgreen: :arrow:
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#18 premierPas

    Ceinture Jaune

  • Members
  • PipPip
  • 22 messages

Posté 24 October 2011 - 16:24 PM

je te dis ça dans un ou deux jours par ce que là je me suis isolé chez mon frêre (non c'est faux je ractonte pas ma vie) pour bosser tranquillement ^^

en tout cas un grand merci pour ton initiative :D !! c'est vraiemnt hyper sympas ;)

Modifié par premierPas, 24 October 2011 - 16:25 PM.


#19 premierPas

    Ceinture Jaune

  • Members
  • PipPip
  • 22 messages

Posté 30 October 2011 - 18:08 PM

ça y est j'ai ma réponse c'est n'importe quelle heure le 5 ou 6 ^^ donc à toi de voir quand ça t'arrange ;)

#20 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 31 October 2011 - 08:53 AM

Très bien :)
Comme quoi, les filles ne sont pas si enquiquinantes que ça ;)

Si j'ai le choix, j'aime autant le 6 (dimanche).

On se cadre en MP :)
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos



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