2012-12-28 5 views
7

私は45度の角度でキャノンから発射されている長方形の体を持っています。体はまた45度の角度で回転し、私は体の前部にあるように質量を設定しました。体が重力で下向きに回転していない

体は大気中に上がりますが、体が地面に戻ってくると回転しません。マス側が最初に降りるような方法はありますか?

私の実際の世界の例は、空気中に紐が付いたテニスボールを投げることです。現在、重力が作用したときに弦がボールの後ろに落ちない。ここで

が私の「ボール」

Body = BodyFactory.CreateRectangle(world, ConvertUnits.ToSimUnits(texture.Width), ConvertUnits.ToSimUnits(texture.Height),100f, postition, this); 
Body.Mass = 1; 
Body.LocalCenter = new Vector2(ConvertUnits.ToSimUnits(Texture.Width), ConvertUnits.ToSimUnits(Texture.Height/2)); 
Body.UserData = this; 
Body.BodyType = BodyType.Dynamic; 
Body.CollisionCategories = Category.All; 
Body.CollidesWith = Category.All; 
Body.IgnoreGravity = false; 
float ang = BarrelJoint.JointAngle; 
Body.Rotation = ang; 

ですそれから私はそれを発射するために、この操作を行います。

Body.ApplyLinearImpulse(new Vector2((float)Math.Cos(ang) * 100, (float)Math.Sin(ang) * 100)); 

私が推測しています、私は忘れていますいくつかの設定や計算です。

+2

体は空気抵抗がある場合にのみ回転します。あなたのシミュレーションは雰囲気をモデル化していないと思います。 – phoog

+0

@phoogその答えを –

+0

あなたは遠方の物理学の世界でどのように雰囲気をシミュレートするつもりですか? – Jastill

答えて

1

これを今後読んでくれる人のために、私はそれを解決しました。

ローテーションを変更したいのと同じように速度が変化していることに気付きました。だから私はベロシティの回転に基づいて、より多くの重力がオブジェクトが顔を下に向けるより多くをプルダウンします。我々は回転体を持っている

public override void Update(GameTime gameTime) 
    { 
     Vector2 velocity = Body.LinearVelocity; 

     float radians = (float)(Math.Atan2(-velocity.X, velocity.Y) + Math.PI/2.0); 

     Body.Rotation = radians; 

     base.Update(gameTime); 
    } 

とTaダ:私のオブジェクトの更新クラスで

は、私は次の(潜在的に悪い数学のノート)を置きます。

関連する問題