Pregunta

Este es un problema que he estado esperando para resolver por un tiempo, aunque nunca puedo encontrar una manera de solucionarlo. Creo que puede estar pasando algo, pero me parece que no puede encontrar lo.

Estoy tratando de destruir los organismos de la b2World, que he visto en varios tutoriales que cuando destruyen un objeto en box2d con depuración dibujar en, la forma se destruye también. Por alguna razón, cuando lo haga:

world.DestroyBody(_body) no parece hacer nada. Las estancias de la forma en la pantalla.

Alguien ha tenido este problema antes? Me preocupa porque después de un tiempo con el juego, todos los objetos que yo quiero destruir permanecen en la pantalla y todavía se registran las colisiones que en realidad retrasan el juego.

Cualquier ayuda sería muy apreciada,

Gracias,
Will

EDIT:. [RESUELTO] Gracias chicos, que tiene mucho sentido

¿Fue útil?

Solución

he tenido este problema por mí mismo en algunos proyectos. Creo que sucede cuando usted está tratando de eliminar un cuerpo que está "en uso" por el motor Box2D. Lo he resuelto mediante la adición de los cuerpos Quiero destruir a una lista y luego destruirlos antes de que el siguiente render.

// add body to list if it should be removed
if(shouldRemoveBody)
{
    _removeList.push(bodyToRemove);
}

// start next render with a check
if(_removeList.length > 0)
{
    // remove all bodies in list
}

Otros consejos

Para añadir a lo que dijo Mattias, hago lo mismo que hace, por introducir objetos a la lista ToBeRemoved.

y tengo una clase de actor por cada sprite gráfica en la escena, he aquí algo de código:

public class Actor
{
    protected var m_body:b2Body;
    protected var m_sprite:DisplayObject;

    public function Actor(body:b2Body, sprite:DisplayObject)
    {
        this.m_body = body;
        this.m_sprite = sprite;
    }

    public function destroy():void
    {
        // remove sprite
        m_sprite.parent.removeChild(m_sprite);

        // remove physical body
        GlobalVars.world.DestroyBody(m_body);
    }
}

y cuando quiera destruir un objeto, sólo el llamamiento del actor destruyen método.

Tenga en cuenta que los campos de esta clase están protegidos por lo que podemos extenderlo por agentes del niño.

De esta manera, funciona sin problemas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top