2014-06-19 2 views
4

userdragable 개체로 시소를 설정하려고합니다. PhysicsJS에서 세계를 창조 한 후 마우스 드래그 상호 작용은PhysicsJS에서 대화 형 및 비대화 형 객체를 설정하는 방법은 무엇입니까?

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

으로 잘 작동합니다. 결과적으로, 추가 된 객체를 드래그 할 수 있도록 (상자 객체) 싶습니다. 그러나 레버를 드래그 할 수는 없지만 상자와 상호 작용해야합니다. 따라서 레버는 교체 된 상자에 따라 회전해야합니다. fulcurm는 static에 그 treatment 속성을 설정하여 비대화 방법에 배치됩니다 :

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}, 
     ] 
    })); 

어떻게 객체가 서로 상호 작용 할 수 있지만, 일부는 userdragable입니까?

바이올린은 할 수 있습니다 : 지원되지 않는 순간 http://jsfiddle.net/YM8K8/

+0

하나가 완전히 멋진 모습 :) – davidkonrad

+0

그것은 유망 물리 엔진입니다. 다른 프로젝트에 비해 꽤 활발한 것 같습니다. – alex

답변

2

...하지만해야합니다. github에 버그로 추가했습니다. https://github.com/wellcaffeinated/PhysicsJS/issues/101

원하는 경우 복사 및 붙여 넣기를하고 이름을 변경하여 새로운 "대화식"동작을 만들 수 있습니다. 그것은 마우스 좌표에 몸을 검색 할 때 즉 무엇을

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

:

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

변경하려면 다음

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

그런 다음 손잡이 기능에 바로이 작은 추가하기 또한이 동작을 적용한 집합에 본문이 있는지도 확인합니다. 그런 다음

대신 마지막에 추가, 이것은 수행하십시오 바이올린의 몸 전에 동작을 추가 :

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

이 "는이 세계에서 현재 시신을 찾기 위해 world.find를 사용합니다 상자 "이름. 그런 다음 그 시체의 배열을 행동에 보내고 그 행동을 그 시체에만 적용하도록 지시합니다.

다음은 수정 된 바이올린의 :

나 physicsJS을 알려 주셔서

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

관련 문제