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 28/01/2011, 17h42   #1
Membre habitué
 
Inscription : octobre 2004
Messages : 614
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 614
Points : 127
Points : 127
Par défaut Gestion de sprite / texture

Bonjour à tous.

J'ai fais un peu c/c++ / openGL il y a de ça 2-3 ans et je me remets doucement à la programmation via flash / AS3. Je suis débutant en la matière.

Mon problème se situe au niveau de la gestion des images dans un projet en actionscript. En fait, j'ai du mal à voir la logique à appliquer. J'essaie en vain de retrouver un parrallèle avec la manière de faire en OpenGL (chaque objet à une texture, que l'on peut modifier, le tout gérer par un "gestionnaire de texture", ect...)

Mon principal problème vient du faire que je n'arrive pas à copier de donnée en flash. J'ai chargé une série d'images sous la forme de Loader / Sprite (je n'ai pas encore bien cerné la différence entre les deux) et j'aimerai les dupliquer, car plusieurs et mes objets possède la même texture.

Exemple : je veux faires des "tiles". J'ai cherché mes X tiles et je cherche à les utiliser. Il va donc me falloir plusieurs fois le même tiles et je ne trouve pas la méthode "propre" pour faire cela en flash

La seule solution que j'ai en tête et de charger une image pour chaque case de ma map (ce qui a le défaut principale de charger plusieur fois la même image et le défaut secondaire de charger une nouvelle image dès que ma case change...)

Bref, vous avez sûrement dû le voir à mes explications un peu brouillonne, je suis perdu...

/help
Clad3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 22h15   #2
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
Tu peux draw sur un bitmap data et assigne le bitmapdata a un bitmap.

C est la maniere la plus efficace en utilisant du copy pixel et en lockant le bitmapdata
__________________
Mon nouveau blog : Flash-Dungeon : AS3 / Objectif-C
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 22h17   #3
Membre habitué
 
Inscription : octobre 2004
Messages : 614
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 614
Points : 127
Points : 127
Je vais regarder de ce côté là Pour l'instant j'utilisais du "urlrequest" et du "loader".
Clad3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 09h29   #4
Membre habitué
 
Inscription : octobre 2004
Messages : 614
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 614
Points : 127
Points : 127
Suite à tes conseils, j'ai chargé mes X images dans des bitmapdata et ensuite assigné chacun de ses bitmapdata a plusieurs bitmap (j'ai donc bien des copies de la même image).

Après, je ne sais pas si j'ai fais les choses de travers ou si c'est juste extrêmement lent mais pour chager 20 images en 16*16 ça me prend au moins 3/4 secondes [je n'ai pas fais de tests poussés mais à priori c'est le chargement et non l'affichage qui est lent].

Voici un morceau de mon code pour illustrer cela :

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
 
public function LoadTileSet(ImgPath:String)
		{
			var MyImgLoader:Loader = new Loader() ;
			var MyImgData:URLRequest = new URLRequest(ImgPath);
			MyImgLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
			MyImgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			MyImgLoader.load(MyImgData) ;
 
			function onComplete(evt:Event):void
			{
				if ( IndexTile < TilesName.length - 1)
				{
					IndexTile++ ;
					ImgPath = "img/tiles/auto/grass/Grass " + TilesName[IndexTile] + ".png";
					LoadTileSet(ImgPath);
				}
				else
				{
					LoadingState = 1 ;
				}
				var Bt:Bitmap = Bitmap(MyImgLoader.content) ;
				GrassTilesData.push(Bt.bitmapData) ;
			} 
 
			function onProgress(evt:ProgressEvent):void
			{
			}
		}
La c'est juste pour charger les images, mais lorsque je trace un "ok" mais la fonction oncmplete, je vois que même sans affichage, ca prend 3-4 secondes pour tout charger. Des idées?
Clad3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 18h04   #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
Hehe, alors ce problème ne viens pas de l affichage mais bel et bien du chargement :

1 frame minimum pour le creer ,
1 frame(minimum) pour le charger,
1 frame pour chopper le complete.

Donc 3 frame, 20 image => 60 frame, sa depend de ton framerate mais si tu es a 20 sa fais 3 secondes minimum effectivement...

Le mieux est d utiliser une grande image contenant toutes tes images et de les découper dans ton code directement. tu peux aussi encoder en 64 puis compresser en zlib cette image et l envoyer par amfphp en bytearray. T'aura un temps de chargement bien inferieur mais j utilise sa que quand je need des perfs importante mais sa fais un peu grosse machine de guerre pour 20 images =p.

j'espere t'avoir aidé.

Bon week end
__________________
Mon nouveau blog : Flash-Dungeon : AS3 / Objectif-C
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 19h10   #6
Membre habitué
 
Inscription : octobre 2004
Messages : 614
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 614
Points : 127
Points : 127
Rha merci !

Effectivement, j'avais occulté le fait que mon chargement était bloquant...(et le fait que flash fonctionne en framerate fixe)

Bref, cela me laisse deux solutions :
- faire de grosses images que je découpe
- lancer le chargement de toutes les images en même temps ( je n'avais pas fait ça au départ car je ne pouvais pas controler l'ordre de chargement de ces dernières...mais avec un petit tri de tableau, il y a moyen d'y remédier...et ca devrait être moins gourmand que toutes ces belles frames perdues...)

Bref, merci encore ! C'était sous mon nez, mais tellement gros que je refusais de le voir.
Clad3 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 05h01.


 
 
 
 
Partenaires

Hébergement Web