Duda con mod_chipmunk y SIZE de un proceso.

Started by Erkosone, March 03, 2013, 06:31:27 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Erkosone

Hola, tengo una duda que no termino de encontrar la respuesta, haber si alguien puede indicarme como hacer esto correctamente:


- Tengo un proceso cualquiera, en mi caso con un gráfico circular, vale, creo la entidad de física con normalidad y tal, pero con un size = 30, bien, todo es correcto hasta aquí, ahora llegado el momento en que quiero aumentar el size veo que la física sigue respondiendo con el size que habia cuando se creó el proceso, y mi pregunta es:


- Como se actualiza el shape de un proceso sin eliminar y crear de nuevo la entidad física?

Prg

El uso de estas funcionalidades se conoce como operaciones inseguras debido a que pueden desestabilizar la simulación y generarte un gran caos. La librería en C no recomienda usarlas y actualmente las librerías de chipmunk no funcionan con estas operaciones...

Los cambios se deben hacer manualmento con estas funciones, pero como ya dije, no funcionan, la próxima versión ya funcionarán...

{"SETENDPOINTSLINE" , "FFFF",   TYPE_INT, modsetEndPointsLine},
    {"SETRADIUSLINE" , "F",   TYPE_INT, modsetRadiusLine},
    {"SETOFFSETCIRCLE" , "FF",   TYPE_INT, modsetOffsetCircle},
    {"SETRADIUSCIRCLE" , "F",   TYPE_INT, modsetRadiusCircle},
    {"SETVERTCONVEXPOLIGON" , "FFIP",   TYPE_INT, modsetVertConvexPoligon},

    {"SETENDPOINTSLINE" , "IFFFF",   TYPE_INT, modsetEndPointsLineI},
    {"SETRADIUSLINE" , "IF",   TYPE_INT, modsetRadiusLineI},
    {"SETOFFSETCIRCLE" , "IFF",   TYPE_INT, modsetOffsetCircleI},
    {"SETRADIUSCIRCLE" , "IF",   TYPE_INT, modsetRadiusCircleI},
    {"SETVERTCONVEXPOLIGON" , "IFFIP",   TYPE_INT, modsetVertConvexPoligonI},

Además, en cuerpos compuestos, al escalar, es necesario reposicionar el centroide de los objetos, su escala y quizá su inercia...

La documentación oficial dice:
Modifying cpShapes:
The short answer is that you can't because the changes would be only picked up as a change to the position of the shape's surface, but not it's velocity. The long answer is that you can using the "unsafe" API as long as you realize that doing so will not result in realistic physical behavior. These extra functions are defined in a separate header chipmunk_unsafe.h

Y en el .h dice:
/* This header defines a number of "unsafe" operations on Chipmunk objects.
* In this case "unsafe" is referring to operations which may reduce the
* physical accuracy or numerical stability of the simulation, but will not
* cause crashes.
*
* The prime example is mutating collision shapes. Chipmunk does not support
* this directly. Mutating shapes using this API will caused objects in contact
* to be pushed apart using Chipmunk's overlap solver, but not using real
* persistent velocities. Probably not what you meant, but perhaps close enough.
*/

/// @defgroup unsafe Chipmunk Unsafe Shape Operations
/// These functions are used for mutating collision shapes.
/// Chipmunk does not have any way to get velocity information on changing shapes,
/// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them.
/// @{

Saludos
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

Erkosone

Gracias por la información Prg, suponía que serían funciones que desestabilizarían la simulación por que en mi propia librería de física ya me pasaba y es completamente lógico y normal si se piensa.


Vale, pues sin prisa, sabiendo que están reconocidas como inseguras ya se a que atenerme, en mi caso el uso de esto estaría completamente limitado a objetos circulares y modificaciones de radio de no mas del 49% de la superficie de solapamiento para no provocar que los objetos se atraviesen, tengo bastante claro como usar esto jeje.


Oye y muchas gracias por la pronta respuesta tío ;)