2016년 2월 20일 토요일

make game as corona sdk (Fly a rocketman)(5) - categoryBits,maskBits


앞에서 사용된 이미지를 살펴보면 아래와 같습니다.



위 그림에서 보면 block들이 붙어서 움직일때 블럭간에 충돌이 일어나서 블럭들이 움직임이 어색해 보일수도 있습니다.
이때에 있는것이 특정 블럭간에 충돌 방지가 필요하게 됩니다.
physics.addBody 함수에서 categoryBits,maskBits parameter를 추가해서 충돌 범위를 정할 수 있습니다.

기존
physics.addBody(object,"dynamic",{ density=1 })
변경
physics.addBody(object,"dynamic",{ density=1,filter={categoryBits=2,maskBits=1} })

내용은 간단합니다.
categoryBits 는 생성하는 physics object의 카테고리 즉 분류 bit가 됩니다.
maskBits 는 충돌하게 되는 카테고리 즉 분류를 설정하는 곳입니다.

예를 들어서 3개의 object는 categoryBits=2 => 2진수로 10 이 됩니다. 그리고 충돌은 1 이 므로 3개의 객체는 충돌이 일어나지 않으므로 붙어다닐 수 있습니다.
physics.addBody(object1,"dynamic",{ density=1,filter={categoryBits=2,maskBits=1} })
physics.addBody(object2,"dynamic",{ density=1,filter={categoryBits=2,maskBits=1} })
physics.addBody(object3,"dynamic",{ density=1,filter={categoryBits=2,maskBits=1} })

player는 categoryBits가 1 이라고 한다면 player는 object1,object2,object3 과 충돌 검사를 할 수 있습니다.
기존 소스에서 해당 부분만 변경하면 충돌시 아래 그림과 같게 됩니다.









댓글 없음:

댓글 쓰기