4

我正在尝试使用 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/

4

1 回答 1

2

目前不支持这...但应该支持。我已将其添加为 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查找当前世界上具有“盒子”名称的物体。然后,它将该主体数组发送给行为,并告诉行为仅将自身应用于这些主体。

这是修改后的小提琴:

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

于 2014-06-20T15:51:15.033 回答