Question

Ceci est un problème que j'ai voulu résoudre pendant un certain temps, bien que je ne pourrai jamais trouver un moyen de le réparer. Je pense que je peux manquer quelque chose, mais je ne peux pas sembler trouver quoi.

Je suis en train de détruire les corps de la b2World, je l'ai vu sur divers tutoriels que quand ils détruisent un objet en box2d avec débogage sur tirage, la forme est détruite aussi. Pour une raison quelconque quand je fais:

world.DestroyBody(_body) il ne semble pas faire quoi que ce soit. Les séjours de forme sur l'écran.

Quelqu'un at-il eu ce problème avant? Il me fait inquiète parce que, après un certain temps avec le jeu, tous les objets que je veux détruire restent à l'écran et encore enregistrer les collisions qui a vraiment lag le jeu.

Toute aide serait appréciée,

Merci,
Est-ce que

EDIT:. [RESOLU] Merci les gars, qui fait sens parfait

Était-ce utile?

La solution

J'ai eu moi-même ce problème dans certains projets. Je pense que ce qui se passe lorsque vous essayez de supprimer un corps qui est « utilisé » par le moteur Box2D. Je l'ai résolu en ajoutant les corps que je veux détruire à une liste, puis les détruire avant le prochain rendu.

// 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
}

Autres conseils

Pour ajouter à ce qu'a dit Mattias, je fais la même chose qu'il fait, en poussant des objets à la liste ToBeRemoved.

et j'ai une classe d'acteur pour chaque sprite graphique de la scène, voici un code:

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);
    }
}

et chaque fois que je veux détruire un objet, je viens d'appeler les années Actor détruisent la méthode.

Notez que ces champs de classe sont protégés afin que nous puissions étendre les acteurs de l'enfant.

De cette façon, il fonctionne bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top