2012-02-20 5 views
0

なぜ私のコードが完全に機能していないのか不思議でした。Math.Sinを使用したXNAの位置変更

 int sinval = (int)Math.Sin(gameTime.ElapsedGameTime.TotalSeconds) * 100; 
     mSprite.Position += (new Vector2(5 * sinval, 0)); 

私は私の更新方法でこれを持って、本当に私はコンセプトの証明のいくつかの並べ替えを望んでいました。とにかく、私がやりたかったことは、基本的にX軸上でちょっと振っただけでした。しかし何らかの理由で、それは冒頭で一度だけsinvalを追加するので、いつでもこのコードの値の1つを変更すると、新しい開始位置がありますが、それはそれです。

私はこれも更新方法で使用しています。

新しいコード:

 int sinval = (int) (Math.Sin(gameTime.ElapsedGameTime.TotalSeconds) * 61); 
     mSprite.Position += (new Vector2(25 * sinval, 0)); 

答えて

2

あなたは整数にMath.Sinの結果を丸めています。ほとんどで、すべての場合、0になります。Math.Sinは、それぞれ-Math.PI/2とMath.PI/2に対して-1と1を返しますが、それ以外の場合は0に丸めると0になります。

には、に100を掛けた後で整数に丸めたのですか?

int sinval = (int) (Math.Sin(gameTime.ElapsedGameTime.TotalSeconds) * 100); 
+0

はい、あなたは絶対に正しいですが、それでも振動するようには見えません。それは今動く。 – ksandarusi

+0

@ksandarusi:それは今どのように動いているのですか? –

+0

それはまっすぐに移動します – ksandarusi

0

Math.Sin()intに常に0を返すこと鋳造-1と1
間常に。

キャストする場合は、100を掛けてキャストします。

関連する問題