IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Réutiliser des objets préloadés


Sujet :

ActionScript 3

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Par défaut Réutiliser des objets préloadés
    Bonjour à tous,

    J'ai le problème suivant en Action Script 3. Je suis en train de développer un petit jeu en Flash et j'ai externalisé l'intégralité de mes objets graphiques dans des objets dédiés. Je souhaite maintenant pouvoir charger ces objets (MovieClips ou autres objets du même type) et dupliquer ces objets.

    Je prends un exemple simple: dans un shoot them up, je définie les différents types de vaisseaux qui peuvent exister dans mon jeu. Chacun de ces vaisseau a son propre swf qui décrit son animation, bruitages associés, caractéristiques etc.

    Comment puis-je charger un même vaisseau plusieurs fois sans passer par le chargement d'un Loader à chaque nouvelle instance de vaisseau (ce qui ralentirait grandement le jeu)?

    J'ai déjà tenté de charger mes objets à l'aide d'un URLLoader puis, à chaque instance, créer un Loader et le remplir avec la méthode loadBytes mais avec cette solution, mon Loader devient un DisplayObject et non plus un MovieClip. Je n'ai donc plus d'animation ni de son ni rien.

    Merci beaucoup pour vos réponses.

    WT et son premier "vrai" jeu en flash.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Par défaut
    Bonsoir à tous,

    Pour etre plus explicite, voila le bout de code que j'utilise pour dupliquer mes données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    package utils {
    	import flash.utils.*;
    	import flash.net.*;
    	import flash.events.*;
    	import flash.display.*;
     
    	public class MyLoader extends URLLoader {
     
    		public var byteArray : ByteArray;
     
    		public function MyLoader() 
    		{
    			super();
    			this.dataFormat=URLLoaderDataFormat.BINARY;
    			addEventListener(Event.COMPLETE,copyData);
    		}
     
    		public function clone() : Loader {
    			if (byteArray == null) {
    				throw new Error();
    			}
    			var loader:Loader = new Loader();
    			var ctx:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
    			loader.loadBytes(byteArray, ctx);	
    			return loader;
    		}
     
    		public function copyData(event: Event) 
    		{
    			byteArray = new ByteArray();
    			byteArray.writeBytes(data,0,data.length);
    		}
    	}
    }
    Quand j'ajoute ensuite mon Loader (myLoader.clone()) dans mon stage, il ne peut plus etre considéré comme MovieClip. Je dois donc l'encapsuler dans un MovieClip et je n'ai plus que la première image de la première frame qui s'affiche.

    Merci pour votre aide.

  3. #3
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    salut,

    as tu essayé de faire un cast de ton objet ?

    ex : (loader est de type DisplayObject) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var mc:MovieClip = loader as MovieClip;
    var mc:MovieClip = MovieClip(loader);

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Par défaut
    Merci pour ta réponse mais
    j'ai les erreurs suivantes si je n'encapsule pas mon loader dans un MovieClip:
    • Code : Sélectionner tout - Visualiser dans une fenêtre à part
      var mc:MovieClip = loader as MovieClip;
      TypeError: Error #2007: Parameter child must be non-null.
      at flash.display:isplayObjectContainer/addChild()
      at stage.player:layer/init()
      at stage.player:layer/addedTOStage()
      at flash.display:isplayObjectContainer/addChild()
      at stage::StageLoader/loadNextWaive()
      at stage::StageManager/displayOrder()
    • Code : Sélectionner tout - Visualiser dans une fenêtre à part
      var mc:MovieClip = MovieClip(loader);
      TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::Loader@df704c1 to flash.display.MovieClip.
      at stage::StageLoader/generateEnnemy()
      at stage::StageLoader/loadWaive()
      at MethodInfo-172()
      at flash.events::EventDispatcher/dispatchEventFunction()
      at flash.events::EventDispatcher/dispatchEvent()
      at MethodInfo-175()
      at flash.events::EventDispatcher/dispatchEventFunction()
      at flash.events::EventDispatcher/dispatchEvent()
      at ch.capi.net::MassLoader/doComplete()
      at ch.capi.net::MassLoader/checkComplete()
      at ch.capi.net::MassLoader/loadNext()
      at ch.capi.net::MassLoader/onComplete()
      at flash.events::EventDispatcher/dispatchEventFunction()
      at flash.events::EventDispatcher/dispatchEvent()
      at ch.capi.net::AbstractLoadableFile/onComplete()
      at flash.events::EventDispatcher/dispatchEventFunction()
      at flash.events::EventDispatcher/dispatchEvent()
      at flash.net::URLLoader/onComplete()



    J'utilise Flash CS4 si ca peut etre utile.

    Y a t'il un événement envoyé par loadBytes que je suis censé récupérer avant d'ajouter mon objet dans mon MovieClip de personnage?

  5. #5
    Membre chevronné Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Par défaut
    Pour dupliquer un movieclip charger : il faut le load en binaire pour avoir la version serialiser en bytearray et deserialiser ensuite tout en gardant une reference aux bytearray.

    Que la force soit avec toi

    Edit : autre technique : utilise un swc avec l ensemble des graphisme et preload tout d un coup ( ton code utilisant ton swc ). Sa evite les merdouilles de chargement et tu profites de la compression de flash.

    PS : Oublie pas de rasterize les MovieClip sinon tu vas souffrir

Discussions similaires

  1. Importer des objet 3d
    Par wikers dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/02/2004, 15h43
  2. Réponses: 6
    Dernier message: 12/02/2004, 21h55
  3. [MFC] libération des objets GDI's
    Par Kevgeii dans le forum MFC
    Réponses: 5
    Dernier message: 01/02/2004, 10h37
  4. Créer des objets sur la pile ?
    Par Cornell dans le forum Langage
    Réponses: 8
    Dernier message: 03/03/2003, 11h47
  5. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo