如何在PhysicsJS中设置交互式和非交互式对象



我试图设置一个跷跷板与userdragable对象。在PhysicsJS中创建世界后,鼠标拖动交互通过

添加。
world.add( Physics.behavior('interactive', { el: renderer.el }) );

可以正常工作。随后,我希望一些添加的对象是可拖动的(盒子对象)。但杠杆不应该是可拖动的,但它应该与盒子互动。所以杠杆应该根据替换的盒子旋转。通过将支点的treatment属性设置为static,以非交互方式放置支点:

world.add( Physics.body('convex-polygon', {
        name: 'fulcrum',
        x: 250,
        y: 490,
        treatment: 'static',
        restitution: 0.0,
        vertices: [
            {x: 0, y: 0},
            {x: 30, y: -40},
            {x: 60, y: 0},
        ]
    }) );

对象之间如何交互,但只有一些是可拖动的?

小提琴可在:http://jsfiddle.net/YM8K8/

目前不支持…但它应该是。我把它作为一个bug添加到github上。https://github.com/wellcaffeinated/PhysicsJS/issues/101

同时,如果你愿意,你可以通过复制和粘贴来创建一个新的"交互"行为,只需更改名称。

Physics.behavior('interactive-custom', function( parent ){ ...

然后在抓取函数中添加如下内容:

body = self._world.findOne({ $at: new Physics.vector( pos.x, pos.y ) });

更改为:

body = self._world.findOne({ $at: new Physics.vector( pos.x, pos.y ), $in: self.getTargets() });

它的作用是当它在鼠标坐标处搜索主体时,它还会检查该主体是否在你应用此行为的集合中

然后,不要在主体之前添加行为,而是在最后添加,并这样做:

world.add( 
    Physics.behavior('interactive-custom', { el: renderer.el })
        .applyTo(world.find({ name: 'box' })) 
);

这将使用world.find来查找当前世界中具有"box"名称的身体。然后它将body数组发送给该行为,并告诉该行为只应用于这些body。

这是修改后的小提琴:

http://jsfiddle.net/wellcaffeinated/YM8K8/1/

相关内容

  • 没有找到相关文章

最新更新