Je joue actuellement avec XNA et je crée un simple jeu de plateforme 2D. Je pensais ajouter plusieurs couches pour en faire un peu difficile.
Au lieu d'avoir un Vector2
pour mes positions, j'utilise maintenant un Vector3
, uniquement pour l'utiliser Z
comme profondeur de couche. Cependant, comme vous ne pouvez pas utiliser d'opérateurs entre Vector2
et Vector3
pour une raison inconnue [1] , j'ai fini par changer tous les autres Vector2
s de mon jeu, tels que l' accélération , la vitesse et l' offset , donc je peux faire des choses comme position += offset
sans erreurs.
J'ai également changé ma variable de rotation de float
en Vector3
, et j'utilise la Z
valeur pour faire pivoter mes textures. Je prévois d'utiliser le X
et Y
pour inverser l'échelle de mes textures, afin d'obtenir l'effet Super Paper Mario.
Cependant, après avoir changé tous ces Vector2
s en Vector3
s, je me sentais un peu mal à ce sujet. Comment cela affecte-t-il les performances des jeux? Je sais que je ne devrais pas avoir à me soucier des performances de mon petit jeu de plateforme, mais je suis simplement curieux de savoir.
Y at - il des performances notable entre Vector2
s et Vector3
s, par exemple lors de l' ajout ou de les multiplier, ou lors de l' appel Normalize
, Transform
ou Distance
?
[1] Juste une question secondaire, pourquoi n'y a-t-il pas d'opérateurs pour les calculs entre Vector3 et Vector2?
la source
Vous essayez d'optimiser prématurément. La plupart des opérations que vous avez mentionnées (normaliser, transformer, distance) sont à peu près identiques à ce que fait vector2D, si vous pouvez regarder leur code, vous remarquerez qu'elles sont pratiquement les mêmes. La seule différence est que vector3D a un troisième axe. En termes de performances, il devrait être trivial par rapport à un Vector2D.
Quant à votre question secondaire:
Parce que vous ne pouvez pas multiplier les matrices / vecteurs de ligne / vecteurs de colonne qui ont tous deux des tailles différentes.
la source
L'un des plus grands effets sur les performances d'une utilisation
Vector3
inutile, au lieu deVector2
, est l'augmentation de 50% de la taille et l'effet qui a sur le cache .Ces données supplémentaires inutiles doivent être chargées dans le cache du processeur à partir de la mémoire principale. C'est lent .
De plus, en chargeant ces données inutiles, vous augmentez les chances que vous extrayiez des données utiles qui doivent ensuite immédiatement être rechargées dans cache.
Dans une boucle modérément serrée, les effets de cache submergeront tous les effets de processeur d'effectuer des opérations supplémentaires.
En outre, il est plus rapide d'ajouter directement les éléments (en raison de diverses bizarreries de .NET). Donc, si vous micro-optimisez, vous n'utiliserez pas les opérations vectorielles de toute façon. Donc, si vous avez seulement besoin d'ajouter les deux premiers éléments d'un vecteur, vous pouvez le faire:
Mais ces types de considérations de performances ne sont vraiment applicables qu'à des choses comme les moteurs à particules, les moteurs physiques, etc. Alors ne t'inquiète pas trop!
la source