2016-10-05 1 views
0

J'ai une application adobe air fonctionnant sur les plates-formes Android et iOS. Dans l'application, j'appelle plusieurs clips sur scène, donc il y aura toujours plusieurs clips sur scène. Exactement, j'ai 6 clips vidéo différents, et je les appelle à chaque fois 6/5/4 fois.
Je veux les faire animer, comme dans aller à la bibliothèque, aller dans le clip, et créer une animation image par image.

J'ai essayé de créer 25 images PNG, 300 dpi, 40x40. L'animation fonctionne correctement, mais le problème est que chaque fois que je lance l'application sur n'importe quel appareil, le temps de réponse est énorme, ce qui provoque parfois l'effondrement de l'application. Il semble que si je faisais une animation image par image, avec des PNG haute résolution, l'application serait trop lente à utiliser.

Je dois avoir une bonne qualité pour chaque image dans le clip, mais je suppose que le faire avec des PNG de haute qualité n'est pas la meilleure approche à utiliser. Je pensais que peut-être importer plusieurs fichiers illustrateur et les diffuser sur chaque image pourrait le faire. Mais je ne suis pas sûr que l'appareil mobile puisse atteindre le meilleur rapport qualité/performance.

Ainsi, comment puis-je atteindre le meilleur rapport qualité/performance dans Flash CS6, AS3 adobe air ciblant les appareils mobiles?Créer une animation image par image à l'intérieur du film Clip AS3 - Adobe air

Edit:

J'ai le clip créé et dans la bibliothèque, à l'intérieur de celui-ci je l'ai chargé une image PNG. J'ai essayé de:
Convertir l'image à l'intérieur de ce clip en un clip, et pris soin de tous les noms nécessaires juste pour confirmer avec la réponse suggérée. Le clip père est lié à une classe AS, dans laquelle j'ai essayé d'insérer le code suggéré, mais ce qui s'est passé, c'est que les clips ont cessé d'apparaître sur la scène. Est-ce que je manque quelque chose?

+1

300dpi n'a pas de sens et n'est pertinent que pour l'impression. Les chances sont que le problème de performance vient de la façon dont vous utilisez les images. Mais vous n'avez pas montré votre code. Aussi, pourquoi ne pas créer cette animation image par image dans Flash? Après tout, c'est un logiciel d'animation. – null

+0

Vous devriez tout mettre dans des bitmaps. Les bitmaps utilisent le GPU, les vecteurs et le PNG utilisent le CPU. L'optimisation Bitmap est définitivement nécessaire pour une animation fluide sur mobile. Parce que vous faites Android et Android a tellement de dimensions d'écran différentes et ppp, vous devez dessiner des choses dans le vecteur, redimensionner les vecteurs pour s'adapter à l'appareil, convertir les vecteurs en bitmaps. Je peux vous donner plus d'informations et un exemple de code si vous pensez que c'est la réponse à votre question. – moot

+0

@moot Je suppose que oui c'est la bonne façon de traverser, j'ai créé plusieurs fichiers illustrateurs, chacun représentant une image de l'animation, pensez-vous que je devrais les enregistrer en tant que bitmap et les importer image par image dans le clip en flash? ou puis-je les importer comme eps ou quelque chose? que pensez-vous être la meilleure approche? –

Répondre

0

Vous devriez tout mettre en bitmaps. Les bitmaps utilisent le GPU, les vecteurs et le PNG utilisent le CPU. L'optimisation Bitmap est définitivement nécessaire pour une animation fluide sur mobile. Parce que vous faites Android et Android a tellement de dimensions d'écran différentes et ppp, vous devez dessiner des choses dans le vecteur, redimensionner les vecteurs pour s'adapter à l'appareil, convertir les vecteurs en bitmaps.

Voici un exemple de code pour convertir un MovieClip en bitmap. Le movieclip original - mcCircleVector - est dans un support movieclip - mcCircle. Le code convertit mcCircleVector en bitmap, le supprime et ajoute le bitmap à mcCircle afin que vous vous retrouviez avec un MovieClip.

var bmpTemp: Bitmap; 
bmpTemp = new Bitmap(); 
bmpTemp = fConvertToBMP(mcCircle.mcCircleVector, 150, 150); 
mcCircle.removeChild(mcCircle.mcCircleVector); 
mcCircle.mcCircleVector = null; 
mcCircle.addChild(bmpTemp); 
bmpTemp = null; 


private function convertBMP(pClip: MovieClip, pWidth: int, pHeight: int): Bitmap { 
    var bd: BitmapData = new BitmapData(pWidth, pHeight, true, 0x00000000); 
    bd.draw(pClip, null, null, null, null, true); 
    var bmp: Bitmap = new Bitmap(bd, "auto", false); 
    bmp.smoothing = true; 
    return bmp; 
} 
+0

s'il vous plaît vérifier mon Edit, je l'ai essayé, mais je suppose qu'il me manque quelque chose –