2012-08-28 4 views
0

나는이 차량의 움직임을 좀 더 현실감있게 보이려하고있다.스프라이트의 회전 지연

이것은 회전의 순간을 제외하고는 완벽하게 작동합니다.

즉시 할 수 있습니다. 나는 너무 빨리 돌아 다니기를 원하지 않는다.

public void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float pValueX, final float pValueY) { 
    final Body carBody = CityRacerActivity.this.mCarBody; 
    final float rotationInRad = (float)Math.atan2(-pValueX, pValueY); 

    if ((pValueX == 0) && (pValueY == 0)) { 
     //Don't turn the body/sprite of the car 
    }else { 
     carBody.setTransform(carBody.getWorldCenter(), rotationInRad); 
     //turn the car body in the direction of movement 
     CityRacerActivity.this.mCar.setRotation(MathUtils.radToDeg(rotationInRad)); 
    } 

    //set the velocity 
    final Vector2 velocity = Vector2Pool.obtain(pValueX * 5, pValueY * 5); 
    carBody.setLinearVelocity(velocity); 
    Vector2Pool.recycle(velocity); 
} 

차를 운전하는 것처럼 더 많은 놀이를하고 싶습니다.

+0

어디에서이 메서드를 호출합니까? –

+0

이 메소드는 andengine의 일부로 사용됩니다. 터치 스크린에 디지털 조이스틱을 만듭니다. –

답변

2

setRotation 방법은 신체의 "마주 보는 방향"을 즉시 변경합니다.

대신 setAngularVelocity을 사용할 수 있습니다. 또한 자동차가 그 자리에서 실제로 회전 할 수 없으므로 게임을 훨씬 더 현실적인 것으로 만들 것입니다. 따라서 각속도로 물리 세계 업데이트 중에 자동차가 회전하고 평상시의 속도로 이동합니다. 그래서 그것은 움직이면서 회전하고, 우리의 세계에서 일어나고있는 일입니다.

턴이 얼마나 날카로운가에 따라 setAngularVelocity 매개 변수를 지정하면 90 도가 최대 IMO 여야합니다 (하지만 테스트 후 결정).

관련 문제