2016-11-11 1 views
1

회전에서 정지하는 방법 :Box2D의 그래서 'A'를 사용하여 'D'로 수평으로 이동할 수있는 선수 (Box2D의 상자)가 플레이어 (박스)

SetLinearVelocity(b2Vec2(speed, object.getB2Object()->GetLinearVelocity().y)); 

하지만을 나는 상자를 이동할 때 플레이어는과 같이 모서리에 있지만 역할을 밀어하지 않습니다

enter image description here

내가 상자의 마찰과 땅을 줄이면 어느 정도이 문제를 방지하지만 여전히 상당히 regulary에 발생하는 것으로 파악

하고는한다 플레이어가 멈출 때 더 미끄러집니다. 함수 SetFixedRotation (true)을 시도했지만, 플레이어가 모두 함께 움직이는 것을 멈추게하는 것처럼 보입니다. 아마 회전 할 지점에서 멈추게됩니다. 나는 또한 SetAngularVelocity (0)을 시도했으나 여전히 천천히 회전하고있다. 표면을 이동할 때 플레이어가 회전하지 못하도록하는 다른 방법이 있습니까? 감사합니다

거의 회전하지 않는 상자를 제로로 마찰을 설정하여 무엇을 제안 pingul 수행 한 후 [편집]. 그것은 아주 빈번하게 무언가를 걸어 다니는 것처럼 보였습니다. 바닥을위한 10 개의 개별 타일 대신에 나는 그것을 제거하고 넓은 타일을 만들었고 문제는 멈 췄습니다! 그러므로 나는 상자가 다음 타일을 따라 걸려 넘어지고 있다고 생각한다.

//the number of tiles 
const unsigned int MAX_TILES = 10; 
for(int i = 0; i < MAX_TILES; i++){ 
           //position      ,size   ,density ,linear_damping ,friction ,isdynamic,b2World          
    tiles.push_back(new GameObject(vec3(6+i-(MAX_TILES/2), -10, 1), vec3(1, 1, 0), 1.0f ,1.0f   ,0.5f  ,false ,world_b2)); 
    tiles[tiles.size()-1]->Init(); //Some OpenGL stuff for rendering 
    tiles[tiles.size()-1]->getMesh()->setTexture(test_sheet.getTexture(2,0)); //gets a texture from sprite sheet class 
} 

[편집 2]

수학 라이브러리를 사용하여 : : 이런 일이 왜 모든 타일을 알고 같은 높이, 폭, 위치를 가지고 다음과 같이 나의 다음 문제는 그 다음이다 GLM

타일을 수평 방향으로 겹치게하면 아무 일도 일어나지 않지만이 작업은 수직 축과 관련이 있다고 생각합니다. 플레이어가 회전하거나 회전하지 않을 때 y 값이 약간 변경됩니다. 이것은 위 또는 아래 일 수 있으며 +0.003 ~ 만 변경됩니다. 점프 할 때 바닥 타일 중 하나에서 게임이 시작되면 맨 처음 값으로 돌아갑니다.

+0

마찰을 0으로하면 어떻게됩니까? – pingul

+0

제발 내 편집 확인하십시오 :) – MajesticHey

답변

0

어떤 종류의 벡터 라이브러리를 사용하는지 모르겠지만 vec3은 부동 소수점 또는 인수를 인수로 사용한다고 가정합니다. vec3(6+i-(MAX_TILES/2)을 부동 소수점 수로 변환하면 개체 사이에 작은 간격이 생길 수 있습니다.

개체가 소량 겹칠 수 있습니까? sizevec3(1.0001, 1, 0)으로 변경하면 어떻게됩니까?

+0

환자 주셔서 감사합니다. 편집 2 추가됨 – MajesticHey

+0

@MajesticHey Hmm ... 타일 코드가 그 불일치에 대해 책임지지 않아야합니다. 비트 맵 대신 다른 객체의 경계 상자를 그릴 경우 어떻게됩니까? 예 : 그 물체를 아주 뚜렷한 색으로 만들어 그 대신에 그립니다. 또한 캐릭터 이동에 대한 코드를 표시 할 수 있습니까? – pingul

+0

@MajesticHey 문제의 해결책을 찾았습니까? – pingul