2013-09-03 1 views
0

어제 jbox2d를 사용하기 시작했는데 현재 문제가있어 문제를 해결할 방법을 찾을 수 없습니다. 나는 많은 정적 인 몸과 하나의 역동적 인 몸 (플레이어)을 가지고 있고 나는 충돌을 시뮬레이션하고 싶다.Jbox2D와 관련한 문제

기본적으로 world.step 메서드가 호출되는 즉시 내 동적 본문은 x 축과 y 축 (18.0에서 19.25 사이 및 26.0에서 70.76까지)의 원래 위치에서 벗어납니다. 정적 인 몸체의 위치와 역동적 인 몸체의 움직임) 그리고 그것이 맞습니다.

중력 (나는 필요하지 않습니다)과 관련이 있지만, 저는 세계와 역동적 인 몸체를 0.0f , 그것은 여전히 ​​동일한 문제를 제공합니다. 문제는 내 동적 엔티티의 fixture입니다 (제거 할 경우 문제가 더 이상 발생하지 않습니다)

또한 본문 및 동적 엔터티가 약간 다르게 이동합니다 pixe ls, 그래서 내 setLinearVelocity 메서드가 잘못되었을 수도 있습니다)

이 문제를 해결하려면 어떻게해야합니까?

지도 클래스, 게임의 맵을 포함

내 코드 (나는 쓸모없는 물건을 피하고 내가 만에 대한 jbox2d 유지)입니다.

//fields 
Code: 
public static final float METER_IN_PIXELS = 40.0f; 
private World world; 
... 



//constructor 
Code: 
public Map(int startPosX, int startPosY) 
{ 
    world = new World(new Vec2(0,10.0f)); 
    ... 
} 


//called every 33ms 
Code: 
public void update(int delta) 
{ 
    world.step(1/60.0f, 8, 3); 
    player.update(delta); // to update the player's movement 
     ... 
} 

PhysicsMovingEntity 모든 이동 기관에 의해 사용되는 클래스 (순간에 그것은 플레이어

//fields 
Code: 
private Body body; 
private float physicsX; 
private float physicsY; 

//constructor 

public PhysicsMovingEntity(float x, float y, World world) 
Code: 
{ 
    super.setX(x); 
    super.setY(y); 
    physicsX = x/Map.METER_IN_PIXELS; 
    physicsY = y/Map.METER_IN_PIXELS; 
    initPhysicalBody(world); 
} 


//init method 

Code: 
public void initPhysicalBody(World world) 
{ 
    BodyDef bd = new BodyDef(); 
    bd.type = BodyType.DYNAMIC; 
    bd.position.set(physicsX, physicsY); 
    bd.gravityScale = 0; 
    PolygonShape ps = new PolygonShape(); 
    ps.setAsBox(getFrameSize().width()/Map.METER_IN_PIXELS, getFrameSize().height()/Map.METER_IN_PIXELS); 
    FixtureDef fd = new FixtureDef(); 
    fd.density = 1; 
    fd.shape = ps; 
    body = world.createBody(bd); 
    [color=#FF4000]body.createFixture(fd);[/color] // this toggles the problem 
} 


//called every 33ms 
Code: 
public void update(int delta) 
{ 
    super.update(delta); 
    [color=#FF4000]body.setLinearVelocity(new Vec2(getLastDirection().getX() * getSpeed(), 
     getLastDirection().getY() * getSpeed()));[/color] // probably giving the second problem 
} 

정말 너희들이이 문제를 해결하는 나를 도울 수 있기를 바랍니다.

감사 만 연장 있어요

+0

이러한 함수는 무엇입니까? getLastDirection() & getSpeed ​​() giving –

답변

0

죄송합니다. 그 이유는 벽의 위치가 잘못 되었기 때문입니다 (처음에는 플레이어와 충돌합니다.)

감사!

관련 문제