AS3 Intégrer des images de la classe et puis obtenir ces images dans une autre classe?
Par exemple, en ce moment j'ai une classe appelée "Boules.". Ici, je charge 10 balles différentes images. Vous savez, comme ceci:
[Embed(source = "/ball1.png")]
[Embed(source = "/ball2.png")]
Le problème est que si je spawn 5 balles, ces boules d'images gonna get embeded 5 * 5 fois à droite? Corrigez-moi si je me trompe! J'ai donc bien que, je ne peux pas avoir un ballimageloading classe? Qui se charge de ces images en une fois, et ensuite dans les Boules.comme je l'ai peut charger tout ce ballon, je veux pour le moment?
OriginalL'auteur user1941346 | 2013-01-27
Vous devez vous connecter pour publier un commentaire.
La meilleure pratique est d'avoir un
Assets
classe qui contiendra statique embeded images, comme ceci:Puis tout ce que vous aurez à faire est de déclarer une variable pour votre chargé
Bitmap
et de l'utilisation, comme:Cela va créer une
Bitmap
instance de votre image chargée et vous pouvez ensuite l'ajouter à la liste d'affichage. Le chargement ne se fera qu'une fois par l'image et vous aurez toutes vos images à portée de main, accessible à partir de toutes les classes que vous avez.OriginalL'auteur Gio
Vous n'aurez pas besoin de "charger" eux, ils sont intégrés. Vous avez juste à instancier les images. C'est une bonne idée d'avoir une classe que la gestion partagée des ressources, en tant que tel:
Puis vous appelez
TextureAssets.init()
la fois (dans la Main.comme pour l'exemple)et quand vous avez besoin le bitmapData: utilisation
new Bitmap(TextureAssets.ball1Texture)
De cette façon, votre programme doit utilise uniquement de la mémoire nécessaire pour un bitmapData au lieu d'avoir de nombreux qui finit par être le même.
Si vous avez besoin d'effectuer des opérations sur une occurrence de bitmapData tout en gardant l'original, vous pouvez utiliser:
Également, si vous êtes l'instanciation de toutes les boules images de l'intérieur d'une classe, c'est une bonne idée de déposer statique d'accès et, au lieu de procéder à l'initialisation bitmapDatas dans le constructeur, créez un nouveau TextureAssets() et d'appeler les textures grâce à la variable
(Champ statique accès est plus lent que directe (.) accès : http://jacksondunstan.com/articles/1690)
Le point principal est de mettre le bitmapData à être construit qu'une seule fois si la même image est destiné à être partagé et rester inchangé. Votre code ci-dessus crée un nouvel objet bitmapData, pour chaque appel de la var mBall1:Bitmap = new Actifs.BallImage1() en tant que Bitmap; " qui pourrait conduire à des fuites de mémoire si user1941346 ne pas faire appel mBall1.bitmapData.dispose() avant de l'enlever de la liste d'affichage ou de perdre de la référence. En plus du coût de la construction d'une nouvelle bitmapData à chaque fois, pour 100 appels il y a une différence de aprox. 500 ko pour un peu de 64x64 png, contrairement à environ 100 ko pour la méthode ci-dessus.
Ok.. j'ai peut-être tort, mais l'appel de méthode clone crée également une nouvelle
BitmapData
objet et le retourne (au moins, c'est ce que les docs disent). help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/...J'ai donné le clone exemple seulement si il existe un besoin de "modifier l'bitmapData" (comme la couleur des transformations ou filtre), afin de préserver l'original.
OriginalL'auteur chadiik