안드로이드를위한 프로그래밍 게임

안드로이드를위한 프로그래밍 게임 28: 충돌을 제어

42 동영상

238 의사록

이러한 충돌을 구현하기 위해, 우리는 연락처로 알려진 Box2D의. 때마다 두기구는 어떻게 든 충돌 충돌이 또는, 접촉하고 통보 할 수 발생 공간의 같은 영역을 차지하려고합니다. 이 세계를 들어 setContactListener라는 방법을 제공합니다, 있는 우리는 그 접촉이 발생할 때 듣고 수신기를 연결하는 ContactListener 우리의 세계를 연결할 수 있습니다.

이것은 더 나은 방법으로 수행 할 수 있지만, 그래서 난 그냥하는 setContactListener (새 ContactListener ()) 하나가 빠르게 정의 할 수 있도록하겠습니다. 당신이 볼 수 있듯이, ContactListener는 여러 가지 방법을 구현한다. 우리는 우리가 충돌을 시작하고, 때 감지 beginContact를 사용할 수 있습니다 endContact 우리는 충돌을 완료 할 때 감지한다. preSolve 및 postSolve이 할 수있는, 따라서 신체 접촉이 처리 될 때 실행

특별한 매개 변수를 사용하여 물리적, 그러나 우리의 경우 우리는 아직 사용하지 않습니다. 우리는 BeginContact 및 EndContact를 취할 것입니다. 플레이어가 어떻게 든 토양과 충돌 할 때마다, 당신이하여 액세스 할 수있는 두기구 사이의 접촉을 생성합니다 연락처 getFixtureA 및 방법의 getFixtureB. 우리가 처음에 어디에 몸을 알 수 없기 때문에 문제가 오는 곳입니다

조명기 A 또는 B 고정하는 경우, 그래서 우리는 여기에서 모든 것을, 우리는 몸이 바닥을 칠 때 감지 할 수 있도록 모든 결정, 우리는 고려해야 여부 == 본문 A, B == 장, == 토양, B는 == 몸, 그래서 우리는 두 번 같은 일을 작성해야 할 때와. 수만큼 깨끗하지 않다. 예를 들어, 내가 contact.getFixtureB를 사용하여 contact.getFixtureA를 사용하여 접촉기구 ()와 B기구를 얻을 수있다 ().

내 고정이 몸에 여부 해당하는 경우 그리고 지금은 감지 할 수 있습니다. 그리고 이것은 내가 어떻게해야합니까 ... 때문에 문제가 올 어디? 처음에 나는 단지기구 자체는 알고있다. 우리가해야 할 일은 fixtureA는 동일한 가변하는 경우, 예를 들면, 결정이다 minijoeFixture 그리고 fixtureB 우리가 UserDatas에 의해 다른 방법으로이 작업을 수행 할 수있는 방법을 보여줍니다 있지만, sueloFixture과 동일합니다. 지금은, 경우 고정대

그것은 Minijoe이고,기구 B는 점프 우리 몸을 요청할 수 있습니다, 토양이다. 당신은 점프를 호출, 쉽게 생각할 수 있습니다. 또한, 그렇게 될 것이라고 생각 하지만 그렇지 않습니다. 이 엔진이 있음을 작동하지 않습니다 필요 점프 때문에,하는 ContactListener 내에서 점프 시작을 할 수 없습니다 과 접촉시 Box2D의는 작동하지 않습니다 같은 것들에 노력한다. 대신, 우리가하는 일은 한 점 Box2D의에 문의입니다

무료 인 이동합니다. 그리고 이것은 점프 시작으로 우리의 게임에서 기억 변환합니다. 그리고 이것은 그 기본적 의미 I 값 haColisionado이 부울 변수를 만들 수 있습니다. 충돌이 진정한 가치를 발생할 때 여기 있습니다. 내가 전에 말했듯이 내가 모두 내 고정 A를 필요로하고 B기구가 몸이나 서로 연결되어 있기 때문에, 나는 두 번이 작업을 수행해야합니다. 예를 들어, 토양 fixtureA 인 경우

대신 조되고, 나는 동일한 작업을 수행해야합니다. HaColisionado true로 설정합니다. 우리가 우리의 관리자 충돌에서 일단 그리고 난 이미 할 수 있습니다, 우리가 재생 또는 충돌 한 경우, 우리는 점프하고도 여러 번 도약 할 수있는 몇 가지 이유로 그것을 방지하기 위해 false로 haColisionado를 넣어 수 있습니다. 따라서, 충돌이 발생 지금 때마다, 다시 이동합니다. 내가 말하는 것처럼, 동일한 관리자 충돌에서 점프를 할 수 없습니다,

당신이 작업 할 때 당신이 때문이다. 그래서 선택의 여지가 있지만이 haColisionado의 예를 들어 경우 그렇게 이상 할 플래그를 넣어 없습니다. 이 BodyEntity 또는 PlayerEntity 같은 심각한 기업이 될 수 있기 때문에 이것은 종종 estaSaltando, debeSaltar, enElAire 같은 속성, 엔티티로 이루어집니다 제어하는 것이 더 유연합니다. 이 같은 내 경우는 여전히 일을하고 있지 않다 모든 변수에 액세스 할 수 있으므로 편리합니다

하지만 Scene2D이 화면을 통합 할 때, 우리는 분명,이 청소기하게 이동을 보증.

새로운 코스를 찾으려면 가입. 아무 스팸 없을 것, 약속 :)

저자에 관하여

foto de jotajotavm
José Javier Villena

전기 : 다른 언어 분석 - 프로그래머. 교사 PREMIUM 플랫폼은 CodigoFacilito으로 세계적으로 인정. 에디터 Cristalab 기사. 내 YouTube 채널은 아나야와 LaTostadora 출판사가 후원한다. 나는 상세히 설명하고 의심의 소지를 없애기위한 몇 가지 예를주는 것을 좋아합니다.