2016-04-06 3 views
0

Je travaille sur un projet utilisant Matter.js où je veux que la gravité soit activée en général, mais je veux pouvoir l'activer et la désactiver pour un seul objet à certaines fois. Je ne veux pas définir cet objet comme statique, parce que je veux que le moteur physique le gère d'une autre manière, je ne veux pas que la gravité l'affecte.Désactivation de la gravité pour un objet spécifique dans Matter.js

J'ai trouvé this question qui traite de la gravité invalidante en général, mais comme je l'ai dit je veux que la gravité fonctionne pour la plupart des objets. Y a-t-il un moyen simple de le faire?

+0

pourrait vous charger l'objet dans un monde nouveau qui est contenu dans le monde principal? de parcourir l'API rapidement, il semble que ce serait la seule façon http://brm.io/matter-js/docs/classes/World.html – tmaxxcar

Répondre

0

Ceci semble fournir une contre-force. Je ne suis pas sûr d'où vient le 200 vient de fonctionner. Peut-être que le moteur calcule la force deux fois par cycle.

playerBody.force.y = -engine.world.gravity.y/200; 

Vous devrez exécuter chaque cycle pour le maintenir.

1

Désactiver la construction dans la gravité puis appliquez votre propre manière sélective, quelque chose comme cela, mais filtrer seulement les corps que vous voulez:

engine.world.gravity.scale = 0; 

Events.on(engine, 'beforeUpdate', function() { 
    var bodies = Composite.allBodies(engine.world); 

    for (var i = 0; i < bodies.length; i++) { 
     var body = bodies[i]; 

     if (body.isStatic || body.isSleeping) 
      continue; 

     body.force.y += body.mass * 0.001; 
    } 
}); 
0

Voici un code simple extrait de code que vous pourriez avoir bascule on/off pour accomplir ce que vous demandez (où body est l'objet qui devrait ignorer la gravité, et noGravity est un booléen qui peut être basculée pour l'activer et désactiver):

Events.on(engine, 'beforeUpdate', function() { 
    var gravity = engine.world.gravity; 

    if (noGravity) { 
     Body.applyForce(body, { 
      x: 0, 
      y: 0 
     }, { 
      x: -gravity.x * gravity.scale * body.mass, 
      y: -gravity.y * gravity.scale * body.mass 
     }); 
    } 
});