Para un juego de XNA 2D, ¿debería usar el Vector2 o Vector3 incorporado o exportar mi propia class desde ActionScript?

Utilizo muchos vectores 2D en mis juegos Flash, básicamente todas las velocidades, posiciones, etc. Guardo de esta manera. Mi class Vector2D tiene muchas funciones integradas para rotation, producto de puntos, projectOnto, etc. La class nativa de Vector2 no parece tener la mitad de estas cosas, pero se usa en muchos lugares. El Vector3 tiene todo esto, pero tiene una dimensión extra que no necesito. Entonces, ¿debería usar cualquiera de los integrados o portar mi class AS3? O debería tratar de extender Vector2 y agregar la funcionalidad adicional que necesito. ¿Podría eso causar algún problema?

La class nativa Vector2 no parece tener la mitad de estas cosas, pero se usa en muchos lugares. El Vector3 tiene todo esto, pero tiene una dimensión extra que no necesito.

Creo que estás equivocado; Vector2 y Vector3 tienen una amplia funcionalidad. Tenga en count que esta funcionalidad se expone como methods estáticos a la class Vector2 / Vector3 , en lugar de a la forma someVector.operationOn(otherVector) . Entonces, por ejemplo, para el producto punto de dos Vector2 s, simplemente escriba Vector2.Dot(firstVector, secondVector) . Además, el mismo set de methods ha existido desde XNA 2.0, así que estoy seguro de que no estamos hablando de versiones diferentes.

Aquí está la list de Miembros Vector2 y Miembros Vector3 de Microsoft. Las páginas tienen por defecto la última versión de XNA, pero puede ver versiones anteriores haciendo clic en el menu desplegable "Otras versiones" en la parte superior de la página, justo debajo del título.

Verás, sin embargo, que la class no implementa rotation y proyección. Por supuesto, la operación de proyección es simplemente Vector2.Multiply(vecB, Vector2.Dot(vecA, vecB)) por lo que puede escribir una pequeña function para eso si lo usa con frecuencia. Para la rotation, debe hacer uso de Vector2.Transform y alimentarlo con una matriz de rotation; Definitivamente recomiendo escribir una function para eso.

En general, recomiendo usar la class incorporada Vector2, y creo que encontrará que se adapta a la mayoría de sus necesidades. El rest, como dije, son funciones muy cortas que puedes exportar. Pero no es necesario duplicar toda la class, ¿verdad? Pero si sientes la necesidad de reescribirlo, no veo una razón fuerte para no hacerlo, ya que no veo cómo XNA de alguna manera puede implementarlo mejor que tú.

Las classs XNA Vector también tienen muchísima funcionalidad, y las funciones de Matrix incluyen classs Vector específicas para XNA, así que personalmente, probablemente usaría las XNA. ¿Por qué redevise la rueda?