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 shuttleAngle
dan 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!
shuttleAngle
untuk melihat apakah itu melekat pada sudut tersebutJawaban:
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 gunakanGamePadDeadZone.Circular
:Ini akan memberi Anda kontrol lebih halus pada kedua sumbu. Lihat halaman MSDN dan artikel ini oleh Shawn Hargreaves .
sumber