Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在PhysicsJS中设置交互式和非交互式对象?_Javascript_Physicsjs - Fatal编程技术网

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

Javascript 如何在PhysicsJS中设置交互式和非交互式对象?,javascript,physicsjs,Javascript,Physicsjs,我正在尝试使用userdragable对象设置跷跷板。在PhysicsJS中创建世界后,通过 world.add( Physics.behavior('interactive', { el: renderer.el }) ); 这很好用。随后,我希望添加的一些对象是可拖动的(长方体对象)。但是杠杆不应该是可拖动的,但它应该与箱子相互作用。因此,杠杆应根据更换的箱子旋转。通过将fulcurm的treatment属性设置为static,以非交互方式放置fulcurm: world.add( Phy

我正在尝试使用userdragable对象设置跷跷板。在PhysicsJS中创建世界后,通过

world.add( Physics.behavior('interactive', { el: renderer.el }) );
这很好用。随后,我希望添加的一些对象是可拖动的(长方体对象)。但是杠杆不应该是可拖动的,但它应该与箱子相互作用。因此,杠杆应根据更换的箱子旋转。通过将fulcurm的
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},
        ]
    }) );
对象如何相互交互,但只有一些是可用户拖动的


小提琴可在以下位置使用:

目前不支持此功能。。。但应该是这样。我在github上添加了一个bug

同时,如果您愿意,您可以通过复制和粘贴创建新的“交互”行为,只需更改名称即可

Physics.behavior('interactive-custom', function( parent ){ ...
然后在grab函数中,只需添加以下内容:

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”名称的实体。然后,它将该实体数组发送给该行为,并告诉该行为仅将其自身应用于这些实体

这是修改过的小提琴:


+1让我了解physicsJS,看起来很酷:)这是一个很有前途的物理引擎。与其他项目相比,似乎相当活跃。