2011-10-06 9 views
6

Para un proyecto basado en Cocos2d, me gustaría utilizar un conjunto de herramientas físicas solo para la detección de colisiones. ¿Cuáles son los pros/contras de usar Chipmunk o Box2d?Para detectar colisiones solo, ¿es mejor Chipmunk o Box2d?

+0

Si no desea manejar la física, ¿por qué incluir una biblioteca completa para hacerlo? – alex

+0

Aunque no necesito la física, me gustaría tener un sistema de detección de colisiones fácil de usar, así que no tengo que escribir el mío. Incluir un juego de herramientas no debería ser un gran problema. –

+3

Una pregunta bastante subjetiva, la "mejor" es la que puede aprender más rápido y comprender mejor. –

Respuesta

4

¿De qué tipo de colisión estamos hablando?

Si todo lo que necesita son los siguientes:

  • rect rect cruza -> CGRectIntersectsRect (..)
  • punto en el rect -> CGRectContainsPoint (..)
  • radio se cruzan (es decir, distancia de dos puntos) -> ccpDistance (..)

Entonces no necesita un motor de física en absoluto, y tampoco tiene que escribir sus propios algoritmos de detección de colisiones.

Chipmunk y Box2D manejan las colisiones igualmente bien. Soy de la opinión de que si uno pregunta "qué es mejor", no le va a importar. En cambio, pregúntese si se siente más cómodo trabajando con C (Ardilla listada) o C++ (Caja2D).

De forma similar, ¿prefiere trabajar con object-oriented, verbose API (Box2D) o functional, highly abbreviated API (Chipmunk)?

Base su decisión sobre qué le facilita el trabajo en lugar de una idea arbitraria, indefinida y altamente subjetiva de si un motor de física podría ser mejor que el otro, porque las diferencias técnicas son marginales y solo puede evalúe su influencia en el diseño de su juego si conocen muy bien el diseño de su propio juego y los algoritmos internos de los motores de física.

+1

Lo hice en un juego recientemente y no lo recomendaría en absoluto. Cocos2D tiene serios problemas con las vistas superpuestas, como la notificación de inicio de sesión de Game Center o cualquier notificación del sistema iOS 5 donde su método de actualización omita algunos fotogramas, lo que ocasiona un efecto de "efecto túnel" que Andy describió en su respuesta. A menos que tenga objetos grandes moviéndose lentamente, debe usar un motor de física con detección de colisión decente. En el caso de Cocos2D, probablemente sea mejor usar Box2D. –

9

Según this answerChipmunk no es compatible con la Detección de colisión continua, pero Box2D sí. Esto es importante para evitar el "efecto túnel" (objetos que pasa ligeramente por unos de otros cuando se mueven a altas velocidades)

Esto se aclara por el comentario de Steffen Itterheim en su Box2D vs Chipmunk FAQ: Si va a tener movimiento muy rápido de objetos físicos, por ejemplo, "Bullets", considere usar Box2D ya que puede hacer colisiones barridas, también conocidas como integración de colisión continua, para evitar que los objetos en rápido movimiento penetren profundamente o incluso hagan un túnel a través de otros objetos.

El Chipmunk Collision Detection habla de un separate() devolución de llamada. Dos formas han dejado de tocar por primera vez este paso. pero no estaba claro si esto tiene alguna implicancia de su capacidad para detectar colisiones a gran velocidad.

También hay un very negative opinion sobre el uso de Box2D para un juego de evasión Mi juego actual está utilizando Box2D, y me gustaría que he usado Chipmunk con ella ... Sobre todo porque Box2D tiene dos problemas graves, que se exacerban en mi juego: En primer lugar, tiene un error REALMENTE VIEJO donde los objetos "se enganchan" en las esquinas, mi juego es un juego de ruptura, por lo que cuando la bola "rueda" a lo largo de una pared, a veces se engancha y se tira lejos de la pared, mucha gente pregunta ¿Por qué mi física de juegos parece "aleatoria"?

Conclusión: Estoy confundido también.

Cuestiones relacionadas