2014-10-07 7 views
1

그래서 저는이 2D 플랫폼 작성자에서 farseer 물리학을 사용하고 있습니다.하지만 어떤 이유로 애니메이션이 고르지 않게 만들고 자극적이게 만듭니다. 나는 두 가지 다른 스프라이트로 시도했다. 첫 번째 프레임에는 네 개의 프레임이 있고 다른 프레임에는 네 개의 프레임이 있습니다. 먼 시어를 사용하면 애니메이션이 고르지 않게됩니다.Farseer Physics를 사용하는 고르지 않거나 느린 스프라이트 애니메이션

_body.Position = new Vector2(_body.Position.X + ConvertUnits.ToSimUnits(_movementSpeed), _body.Position.Y); 

내가 단위를 표시 할 _body.position을 변환합니까 : 여기에 위치를 업데이트하는 코드가

public void CreateBody(World world, float density, Vector2 position, object userData = null) 
{ 
    //magic number; so player doesn't look silly running into something he isn't touching because of a weapon-- CHANGE LATER 
    _body = BodyFactory.CreateRectangle(world, ConvertUnits.ToSimUnits(_attackForkFrames[0].Width * _scale.X - 20), ConvertUnits.ToSimUnits(_attackForkFrames[0].Height * _scale.Y - 2), density, ConvertUnits.ToSimUnits(position), userData); 
    _body.BodyType = BodyType.Dynamic; 
    _body.Restitution = 0f; 
    _body.CollisionCategories = Category.All;//Category.Cat1; 
    _body.CollidesWith = Category.All;//Category.Cat10; 

... 

: 여기

내가 스프라이트를 위해 몸을 만드는 코드입니다.

+0

_XNA_ 또는 _MonoGame_입니까? – MickyD

+0

앞으로는 코드 이미지를 게시하지 마십시오. 시간을내어 사이트로 번역하십시오. – jgallant

+0

장래에'monogame'에 대한 질문에'xna'라는 태그를 붙이지 마십시오. 왜냐하면 전자는 후자의 포크이고 다른 제품이기 때문입니다. – MickyD

답변

2

시뮬레이션 환경에서 피직스 바디의 위치를 ​​수동으로 설정하고 있습니다. 그러나 객체를 초기화하는 경우이 방법이 좋습니다. 그러나 시뮬레이션을 수행하는 것은 좋지 않습니다.

Farseer는 예를 들어 백그라운드에서 충돌을 처리합니다. 그것은 당신의 세계에있는 몸에 다양한 힘을가함으로써 이것을합니다. Position을 움직일 때, 당신은 당신의 물리 엔진의 규칙을 따르지 않고, 당신은 수동으로 세계에서 당신의 물체를 움직이고 있습니다.

원하는 것은 몸을 수동으로 움직이는 대신 힘을 가하는 것입니다. 다음 기기를 가지고 놀아보십시오 :

Body.ApplyForce(); 
+0

운동 학적 대 동적 인 몸체를 고려해 볼 가치가 있습니다. – craftworkgames