Thumbstick Xbox digunakan untuk memutar sprite, formula dasar membuatnya "menempel" atau merasa "lengket" pada interval 90 derajat! Bagaimana Anda mendapatkan rotasi yang mulus?

9

Saya menggunakan rumus yang sangat mendasar untuk menghitung sudut apa yang harus saya hadapi (spaceship misalnya) yang didasarkan pada thumbstick pengontrol Xbox yaitu Anda menggunakan thumbstick untuk memutar kapal.

Dalam metode pembaruan utama saya:

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

Dalam metode draw utama saya:

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

Seperti yang Anda lihat itu cukup sederhana, saya mengambil radian saat ini dari thumbstick dan menyimpannya dalam pelampung shuttleAngledan kemudian menggunakan ini sebagai argumen sudut rotasi (dalam radian) untuk menggambar pesawat ulang-alik.

Untuk beberapa alasan ketika saya memutar sprint rasanya lengket pada sudut 0, 90, 180 dan 270 derajat. Ia ingin puas dengan sudut itu. Itu tidak memberi saya rotasi yang halus dan alami seperti yang saya rasakan dalam game yang menggunakan mekanik yang sama. PS: Pengontrol Xbox saya baik-baik saja!

Hugh
sumber
1
Bukankah Atan2 mengambil nilai Y pertama dan kemudian nilai X? msdn.microsoft.com/en-us/library/system.math.atan2.aspx . Anda harus menukar nilai x dan y Anda terlebih dahulu. Sudahkah Anda mempertimbangkan untuk mengurangi nilai-nilai Anda dengan interpolasi? toValue-currentValue / speed
Sidar
Maaf saya maksud newShuttleAngle - oldShuttleAngle / speed.
Sidar
Itu hanya akan mempengaruhi orientasi visual dan itu tergantung sepenuhnya pada cara mana gambar untuk tekstur diorientasikan - Saya tidak bisa melihat yang mempengaruhi masalahnya.
Joe Shanahan
Apakah ini Windows? Jika demikian atur proyek untuk menggunakan jendela konsol (Proyek -> Pilihan Proyek -> Aplikasi -> Jenis Keluaran) dan cetak sudut Anda shuttleAngleuntuk melihat apakah itu melekat pada sudut tersebut
Joe Shanahan
2
wow pekerjaan hebat SomeWritesReserved dan semua orang, saya sangat terkesan dengan situs ini, umpan baliknya sangat cepat! ini adalah posting pertama saya jadi bisakah seseorang tolong beri tahu saya apa yang harus saya lakukan untuk memberi kredit yang benar kepada semua yang membantu?
Hugh

Jawaban:

18

Mungkin karena cara deadzone GamePad bekerja. Standarnya adalah GamePadDeadZone.IndependentAxes, yang berarti setiap sumbu diperiksa terhadap zona mati secara individual. Hal ini cenderung menyebabkan input terpasang pada setiap sumbu thumbstick analog. Sebagai gantinya, coba gunakan GamePadDeadZone.Circular:

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

Ini akan memberi Anda kontrol lebih halus pada kedua sumbu. Lihat halaman MSDN dan artikel ini oleh Shawn Hargreaves .

SomeWritesResterved
sumber