我正在尝试使用userdragable对象设置跷跷板。在PhysicsJS中创建世界之后,通过
添加鼠标拖动交互world.add( Physics.behavior('interactive', { el: renderer.el }) );
工作正常。随后,我想要一些可添加的对象可以拖动(框对象)。但杠杆不应该是可拖动的,但它应该与盒子相互作用。因此杠杆应根据更换的盒子旋转。通过将treatment
属性设置为static
,以非交互方式放置fulcurm:
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/
答案 0 :(得分: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
来查找当前世界上拥有"框"名称。然后它将该数组的主体发送给行为,并告诉行为仅将其自身应用于这些主体。
这里是修改过的小提琴: