スプライトの回転に使用されるXboxサムスティック。基本的な数式により、90度間隔で「スティック」または「スティッキー」に感じます。どのようにスムーズな回転を得るのですか?


9

非常に基本的な式を使用して、Xboxコントローラーのサムスティックに基づいてスプライト(宇宙船など)が向いている角度を計算します。つまり、サムスティックを使用して船を回転させます。

私の主な更新方法では:

shuttleAngle = (float) Math.Atan2(newGamePadState.ThumbSticks.Right.X, newGamePadState.ThumbSticks.Right.Y);

私のメインの描画方法では:

spriteBatch.Draw(shuttle, shuttleCoords, sourceRectangle, Color.White, shuttleAngle, origin, 1.0f, SpriteEffects.None, 1);

ご覧のとおり、非常にシンプルなので、現在のラジアンをサムスティックから取り出してフロートに格納します shuttleAngleこれをシャトルを描画するための回転角度(ラジアン)引数として使用します。

どういうわけか、スプリントを回転させると、0、90、180、270度の角度でベタつく感じがします。それらの角度で解決したいと考えています。同様のメカニズムを使用するゲームで感じるようなスムーズで自然な回転は得られません。PS:私のXboxコントローラーは大丈夫です!


1
Atan2は最初にY値を取り、次にX値を取りませんか?msdn.microsoft.com/en-us/library/system.math.atan2.aspx。最初にxとyの値を交換する必要があります。また、補間によって値を緩和することを検討しましたか?toValueの-currentValueは/スピード
Sidar

すみません、私はnewShuttleAngle-oldShuttleAngle / speedを意味していました。
Sidar 2012

それは視覚的な方向にのみ影響し、それはテクスチャの画像がどのように方向付けられるかに完全に依存します-彼の問題に影響を与えたとは思えません。
ジョーシャナハン

これはWindowsですか?そう( - >プロジェクトオプション] - > [アプリケーション] - [プロジェクト]> [出力タイプ)をコンソールウィンドウを使用するようにプロジェクトを設定した場合や、あなたの角度を印刷shuttleAngle見ることがあれば、それらの角度でそのスティック
ジョー・シャナハン

2
すごいすごいSomeWritesReservedと他のみんな、私はこのサイトに本当に感銘を受けました、フィードバックはとても速いです!私の最初の投稿なので、助けてくれたすべての人に適切にクレジットするために私が何をする必要があるかを誰かに教えてもらえますか?
Hugh

回答:


18

これは、GamePadのデッドゾーンがどのように機能するかが原因である可能性があります。デフォルトはですGamePadDeadZone.IndependentAxes。これは、各軸がデッドゾーンに対して個別にチェックされることを意味します。これにより、入力がアナログサムスティックの各軸にスナップする傾向があります。代わりに、使用してみてくださいGamePadDeadZone.Circular

newGamePadState = GamePad.GetState(playerIndex, GamePadDeadZone.Circular);

これにより、両方の軸をよりスムーズに制御できるはずです。MSDNページ、Shawn Hargreavesによるこの記事をチェックしてください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.