2014-10-07 70 views
1

因此,我正在使用這種2D製作器中的更先進的物理學,但由於某些原因,它會使動畫波濤洶涌,並且令人惱火。我用兩個不同的精靈來嘗試它。第一幀有4幀,另一幀有10幀。使用farseer時,動畫只是波濤洶涌。使用Farseer物理的波濤洶涌的動作/ Laggy sprite動畫

這裏就是我創建了身體的精靈代碼:

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; 

... 

這裏是代碼更新的位置:

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

我轉換_body.position顯示單位。

+0

這是_XNA_還是_MonoGame_? – MickyD 2014-10-07 07:19:07

+0

未來,請不要發佈您的代碼圖片。花時間把它翻譯成網站。 – jgallant 2014-10-07 11:51:50

+0

未來不要用'xna'來標記'monogame'的問題,因爲前者是後者的一個分支,所以是不同的產品 – MickyD 2014-10-08 02:00:32

回答

2

您正在仿真世界中手動設置物理體的位置。如果你正在初始化對象,這很好,但是,當模擬它時是一個壞主意。

Farseer將處理例如背景中的碰撞。它通過對你的世界中的身體施加各種力量來做到這一點。當你移動它的位置時,你沒有遵循物理引擎的規則,而是手動移動你的物體在世界中。

你想要做的是施加一個力量,而不是手動移動你的身體。嘗試玩:

Body.ApplyForce(); 
+0

它也可能是值得考慮運動學與動力學身體。 – craftworkgames 2014-10-08 02:44:09

相關問題