2010-03-29 22 views
2

J'essaie de dessiner la pluie et la neige comme système de particules en utilisant Core Graphics. Dans le rendu de simulateur s'est bien déroulé, mais quand je cours mon application sur le rendu réel de l'appareil est lent. Donc, conseillez-moi s'il vous plaît approches pour augmenter performance de dessin de système de particules sur iPhone.iPhone. La performance du système de particules

Peut être que je devrais utiliser OpenGL pour cette ou CoreAnimation?

+0

Je pense que vous devez identifier _where_ le ralentissement se produit. Si c'est dans le code de dessin, alors peut-être que les technologies de commutation seraient accélérées. Vous pourrez peut-être améliorer vos algorithmes sans échanger d'API. Chargez Shark et Instruments, et découvrez où votre temps est passé. –

Répondre

2

OpenGL serait le niveau le plus bas pour tomber à pour le rendu, devrait donc offrir les meilleures performances (si bien fait). CoreAnimation serait assez proche s'il n'y avait pas trop de particules (le chiffre exact dépend d'autres facteurs, mais jusqu'à environ 50 devraient être corrects). Lorsque vous dites que vous utilisez CoreGraphics pour l'instant, voulez-vous dire que vous êtes en train de redessiner en fonction d'une minuterie? Si c'est le cas, CoreAnimation va certainement vous aider - aussi longtemps que vous pouvez séparer chaque particule dans une vue. Vous pouvez toujours utiliser CoreGraphics pour rendre les particules individuelles.

Utilisez-vous un moteur physique pour calculer les positions?

+0

> Quand vous dites que vous utilisez CoreGraphics au moment voulez-vous dire que vous êtes redessiner la base d'une minuterie? Oui. J'utilise le minuteur. > Utilisez-vous un moteur physique pour calculer les positions? Un peu. J'utilise peu de formules pour le calcul de la trajectoire. – e40pud

+0

De combien d'objets (particules) parlons-nous? – philsquared

+0

particules maximum comptent sera varié de 100 à 200 (peut-être 300) – e40pud

1

Il est difficile de donner des conseils avec peu ou pas d'informations sur votre mise en œuvre. Une chose qui est un goulot d'étranglement majeur sur l'iPhone de mon expérience sont des allocations de mémoire. Donc, si vous allouez de nouveaux objets pour chaque particule engendrée, ce serait la première chose que vous pourriez vouloir corriger. (Allouer un pool d'objets et de les réutiliser.)

+0

Je réutilise tous les objets après la fin de leur durée de vie. – e40pud

+0

Si vous êtes sûr que le code de dessin est la racine de vos problèmes de performance, il est logique de passer à OpenGL, comme l'a souligné Phil. Je voulais juste noter qu'il pourrait y avoir de la place pour l'optimisation sans réécrire toute la logique de dessin. un rendu efficace d'un système de particules en utilisant OpenGL n'est pas trivial ... – kloffy

2

Si vous dessinez simplement une vue avec Core Graphics, puis que vous redessinez chaque image pour refléter le mouvement des particules, vous verrez des performances terribles (pour plus d'informations, voir this answer). Vous voudrez aller à OpenGL ES ou Core Animation pour l'animation du système de particules.

Ma recommandation serait de regarder CAReplicatorLayer, un nouveau type de couche Core Animation ajouté dans iPhone OS 3.0 et Snow Leopard. J'ai vu quelques systèmes de particules impressionnants créés juste en utilisant ce type de couche, sans utiliser beaucoup de code. Voir l'exemple d'application ReplicatorDemo (pour le Mac, mais les concepts de base sont les mêmes), ou l'article "To 1e100f And Beyond with CAReplicatorLayer" de Joe Ricioppo.