Box2d.js с Processing.js - PullRequest
       29

Box2d.js с Processing.js

2 голосов
/ 04 июня 2011

Недавно я расширил свои знания Javascript, объединив библиотеки Processing.js и Box2D.js, чтобы сделать некоторые аккуратные браузерные симуляции.

Исходя из моей текущей идеи, я пытаюсь позволить пользователю щелкнуть и перетащить фигуру, а затем отпустить ее после отпускания мыши.До сих пор мне удавалось выяснить, как использовать объект b2MouseJoint для манипулирования телом с помощью координат mouseX / mouseY, но он не совсем работает в полной мере.

Все, что происходит, когда фигуращелчок - это закреплено и вращается вокруг того, какая точка мышиX / mouseY была текущей на момент щелчка.

void mousePressed(){
     for(int i = 0; i < circles.size(); i++){   
        //Get body objects from ArrayList
        var obj = circles[i]; 

        // Retrieve shapes from body
        var innerShape = obj.GetShapeList();
        var rad = innerShape.m_radius;

        // Create mouseJoint and add attributes
        var mouseJoint = new b2MouseJointDef();
        mouseJoint.body1 = world.GetGroundBody();

        // Detect body
        if(dist(mouseX,mouseY,obj.m_position.x,obj.m_position.y) < rad){
           Vec2 p = new b2Vec2(mouseX,mouseY);

           mouseJoint.body2 = obj;

           mouseJoint.target = p;
           mouseJoint.maxForce = 10000.0f * obj.GetMass();
           mouseJoint.collideConnected = true;
           mouseJoint.dampingRatio = 0;
           mouseJoint.frequencyHz = 100;
           world.CreateJoint(mouseJoint);      
        }
   }    
}

Итак, в основном мой вопрос, как это можно записать так, чтобы Body / Shape следовал моемукоординаты мыши, пока я удерживаю мышь, вместо того, чтобы просто закрепить форму на месте.

Приветствия

1 Ответ

1 голос
/ 06 июня 2011

По сути, все, что вам нужно сделать, это добавить код, который вы сейчас используете, чтобы установить координату в mousePressed для метода mouseDragged (), так как это метод события, который вызывается, когда мышь перемещается одним нажатием. или несколько нажатых кнопок:

void mouseDragged()
{
  // update obj with mouseX and mouseY in this method
}

Вы также можете захотеть сделать немного больше администрирования, устанавливая переменные меток «первоначального щелчка» во время mousePressed (), обновляя набор переменных «смещения» во время mouseDragged () и фиксируя смещения меток в mouseReleased () , чтобы вы могли выполнять такие действия, как возврат в исходное положение и т. д.

...