Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/02/2011, 21h41   #1
Invité de passage
 
Inscription : février 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 3
Points : 0
Points : 0
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.
White Threat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2011, 22h30   #2
Invité de passage
 
Inscription : février 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 3
Points : 0
Points : 0
Bonsoir à tous,

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

Code :
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.
White Threat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 15h55   #3
Membre Expert
 
Avatar de Lorenzo77
 
Inscription : mai 2006
Messages : 1 294
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 1 294
Points : 1 220
Points : 1 220
salut,

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

ex : (loader est de type DisplayObject) :
Code :
1
2
var mc:MovieClip = loader as MovieClip;
var mc:MovieClip = MovieClip(loader);
__________________
Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
Mon blog : http://web.codeur.free.fr
Lorenzo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2011, 22h17   #4
Invité de passage
 
Inscription : février 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 3
Points : 0
Points : 0
Merci pour ta réponse mais
j'ai les erreurs suivantes si je n'encapsule pas mon loader dans un MovieClip:
  • Code :
    var mc:MovieClip = loader as MovieClip;
    Citation:
    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 :
    var mc:MovieClip = MovieClip(loader);
    Citation:
    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?
White Threat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 10h49   #5
Membre éprouvé
 
Avatar de IP-Fix
 
Inscription : mars 2006
Messages : 406
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 406
Points : 433
Points : 433
Envoyer un message via MSN à IP-Fix
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
__________________
Mon nouveau blog : Flash-Dungeon : AS3 / Objectif-C
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h46.


 
 
 
 
Partenaires

Hébergement Web