4

ユーザードラッグ可能なオブジェクトでシーソーをセットアップしようとしています。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 に答える