Sprite'ı döndürmek için kullanılan Xbox başparmak çubuğu, temel formül 90 derecelik aralıklarla "yapışmasını" veya "yapışkan" hissetmesini sağlar! Düzgün dönüşü nasıl elde edersiniz?


9

Sprite'ımın (örneğin uzay gemisinin) Xbox denetleyicisi başparmak çubuğuna dayanarak hangi açıyla karşılaşması gerektiğini hesaplamak için çok temel bir formül kullanıyorum, yani gemiyi döndürmek için başparmak çubuğunu kullanıyorsunuz.

Ana güncelleme yöntemimde:

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

Ana çizim yöntemimde:

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

Gördüğünüz gibi oldukça basit, mevcut radyanları başparmak çubuğundan alıp bir şamandıra içinde saklıyorum shuttleAngleve daha sonra mekiği çizmek için dönüş açısı (radyan olarak) argümanı olarak kullanıyorum.

Nedense sprint'i döndürdüğümde 0, 90, 180 ve 270 derece açılarda yapışkan hissediyor. Bu açılara yerleşmek istiyor. Benzer bir mekaniği kullanan bir oyunda hissettiğim gibi pürüzsüz ve doğal bir rotasyon vermiyor. Not: Xbox oyun kumandalarım iyi!


1
Atan2 önce Y değerini sonra X değerini almıyor mu? msdn.microsoft.com/en-us/library/system.math.atan2.aspx . Önce x ve y değerlerinizi değiştirmeniz gerekir. Ayrıca enterpolasyon ile değerlerinizi hafifletmeyi düşündünüz mü? Değer / akım Değer / hız
Sidar

Üzgünüm demek istediğim newShuttleAngle - oldShuttleAngle / speed.
Sidar

Bu sadece görsel yönlendirmeyi etkiler ve bu tamamen doku görüntüsünün hangi yöne yönlendirildiğine bağlıdır - bunun problemini etkilediğini göremiyorum.
Joe Shanahan

Bu Windows mu? Böylece (-> Proje Seçenekler -> Uygulama - Project> Çıktı Türü) bir konsol penceresini kullanmak için projeyi ayarlarsanız ve açısını çıktısını shuttleAnglegörmek eğer o açıda olduğu sopalarla
Joe Shanahan

2
vay büyük iş SomeWritesReserved ve diğer herkes, ben gerçekten bu siteden etkilendim, geribildirim çok hızlı! Bu benim ilk yazı böylece birisi bana yardım eden herkese düzgün kredi için ne yapmam gerektiğini söyleyebilir misiniz?
Hugh

Yanıtlar:


18

GamePad'in deadzone'unun çalışması nedeniyle olabilir. Varsayılan olarak GamePadDeadZone.IndependentAxesher eksenin ölü bölgeye karşı ayrı ayrı kontrol edildiği anlamına gelir. Bu, girişin analog başparmak çubuğunun her eksenine yapışmasına neden olma eğilimindedir. Bunun yerine şunu kullanmayı deneyin GamePadDeadZone.Circular:

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

Bu, her iki eksende de daha düzgün kontrol sağlamalıdır. MSDN sayfasına ve Shawn Hargreaves'in bu makalesine göz atın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.