2011-10-06 3 views
1

Je suis en train de développer un jeu qui utilise la physique box2d assez intensivement et mon bêta-testeur a rapporté des performances bâclées quand il y avait beaucoup d'objets sur l'écran. J'étais pratiquement toujours accroché à la version DEBUG de l'application et j'avais une bonne stabilité de 60 fps tout le temps. Après avoir manipulé pratiquement tous les paramètres de construction, j'ai remarqué que dans le mode de construction DEBUG un drapeau ONLY_ACTIVE_ARCH était YES alors que dans RELEASE il était NO. Après la construction de la version RELEASE uniquement pour ARMv6 et l'installation sur un appareil compatible ARMv7, nous avions une stabilité de 60 fps. Essayer de construire pour ARMv7 (Thumb) a donné une performance bâclée (30 - 50% pire) à nouveau. Il y avait également une légère baisse de performance visible dans les environnements simulés non physiques. Les appareils de test étaient iPod Touch 4, iPhone 4 et iPhone 3GS. Pouvez-vous s'il vous plaît partager vos opinions sur pourquoi cela pourrait être ainsi? Je n'ai aucune idée :)Cocos2d + performance Box2d ARMv6 vs ARMv7

Répondre

0

Tout d'abord: toujours mesurer les performances uniquement dans les versions de version. Les builds de débogage incluent des assertions, des logs et peut-être d'autres choses qui peuvent fausser vos résultats de performance, généralement au pire. Si je comprends bien, vous dites que le code ARMv6 est fluide (60 fps) sur tous les appareils, tandis que la construction d'ARMv7 avec les instructions Thumb activées vous donne des performances "bâclées". Je suppose que "30-50% pire" signifie environ 30-45 fps pour le code ARMv7 sur les 3 appareils mentionnés. Il semble également que vous n'avez pas de scénario de test comparable, c'est-à-dire un jeu commençant avec le même nombre d'objets aux mêmes positions pour pouvoir comparer précisément les performances entre les appareils. Il est difficile d'évaluer les différences réelles de performance si vous reproduisez manuellement une scène «beaucoup d'objets» en jouant au jeu.

Comme vous avez déjà activé les instructions ARMv7 et thumb, vous devriez obtenir de bonnes performances, en particulier sur les périphériques de 4ème génération. Vous pourriez vouloir essayer avec le pouce désactivé et refaire le test. Vous devriez également vérifier le niveau d'optimisation de votre version, il devrait être: le plus rapide, le plus petit. En général, vérifiez vos paramètres de construction pour toute entrée qui affecte uniquement ARMv6 ou ARMv7 (ces entrées sont marquées d'une flèche pour les développer).

Vous devez également vérifier que votre problème de performances est réellement lié à la physique. "Beaucoup d'objets" signifie qu'il y a aussi "beaucoup de sprites" sur l'écran. Si elles ne sont pas synchronisées par lots, les performances peuvent baisser beaucoup plus rapidement. Si elles sont également partiellement transparentes, pivotées ou mises à l'échelle, les performances sans sprites seront encore plus mauvaises.

+0

Merci ... Si le jeu fonctionne à 60 fps constant dans DEBUG, il devrait fonctionner de la même façon ou plus vite dans RELEASE, c'est pourquoi je n'ai pas t tester dans la version. Je sais exactement combien d'objets j'ai dessinés/simulés à un moment donné. J'ai essayé de construire le jeu avec exactement les mêmes paramètres de construction (le plus rapide, le plus petit inclus) sauf pour ARMv6/ARMv7 (Thumb), pour DEBUG et RELEASE. Pourtant, il fonctionne plus vite quand je le construis avec ARMv6 et je ne vois pas pourquoi. Mais vous avez raison, je vais faire un test quand j'en aurai fini avec ce projet et développer la question. –

+0

Normalement, les versions de versions s'exécutent au moins aussi vite ou plus vite que les versions de débogage. Mais il y a parfois des cas bizarres qui valent la peine de tester uniquement les performances dans les versions de versions. Après tout, c'est ce que vos utilisateurs vont jouer avec. – LearnCocos2D

2

J'ai remarqué le même problème. Après quelques tests, je reconnus que la performance a beaucoup mieux si je mets la renderMode suivante:

<renderMode>gpu</renderMode> 

Je l'ai testé cela sur une galaxie s2. Jusqu'à présent, je ne sais pas comment l'impact sur les autres appareils est ...

Questions connexes