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 :

Gestion de sprite / texture


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    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

  2. #2
    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
    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

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    Je vais regarder de ce côté là Pour l'instant j'utilisais du "urlrequest" et du "loader".

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    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 : 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
     
    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?

  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
    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

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    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.

Discussions similaires

  1. Ressources gratuites (sprites, textures, modèles 3D, sons)
    Par raptor70 dans le forum Contribuez
    Réponses: 57
    Dernier message: 14/04/2025, 13h46
  2. [À télécharger] Gestion de sprites avec la jAPI
    Par pottiez dans le forum Téléchargez
    Réponses: 0
    Dernier message: 14/11/2010, 15h00
  3. Gestion des Sprites
    Par FCDB dans le forum Développement 2D, 3D et Jeux
    Réponses: 10
    Dernier message: 02/01/2009, 11h00
  4. Gestion des sprites dans un SpriteManager
    Par trecks dans le forum C++
    Réponses: 4
    Dernier message: 05/11/2007, 10h52
  5. [2D] Gestion des sprites sur un moteur 2d
    Par drcd dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 27/03/2006, 16h17

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