Ngón tay cái Xbox được sử dụng để xoay sprite, công thức cơ bản làm cho nó dính vào thanh hoặc cảm thấy dính dính ở các góc 90 độ! Làm thế nào để bạn có được vòng quay trơn tru?


9

Tôi đang sử dụng một công thức rất cơ bản để tính toán góc mà sprite của tôi (ví dụ tàu vũ trụ) sẽ phải đối mặt dựa trên ngón tay cái của bộ điều khiển Xbox, tức là bạn sử dụng ngón tay cái để xoay tàu.

Trong phương pháp cập nhật chính của tôi:

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

Trong phương pháp vẽ chính của tôi:

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

Như bạn có thể thấy nó khá đơn giản, tôi lấy radian hiện tại từ ngón tay cái và cất nó trong một cái phao shuttleAnglevà sau đó sử dụng nó làm đối số góc quay (tính bằng radian) để vẽ con thoi.

Vì một số lý do khi tôi xoay nước rút, nó cảm thấy dính ở các góc 0, 90, 180 và 270 độ. Nó muốn giải quyết ở những góc độ. Nó không mang lại cho tôi một vòng quay mượt mà và tự nhiên như tôi cảm thấy trong một trò chơi sử dụng một cơ chế tương tự. PS: Bộ điều khiển Xbox của tôi vẫn ổn!


1
Atan2 không lấy giá trị Y trước và sau đó là giá trị X? msdn.microsoft.com/en-us/l Library / system.math.atan2.aspx . Bạn cần trao đổi giá trị x và y của bạn trước. Ngoài ra, bạn đã xem xét nới lỏng các giá trị của bạn bằng cách nội suy? toValue-currentValue / speed
Sidar

Xin lỗi tôi có nghĩa là newSh inkAngle - oldShriptAngle / speed.
Sidar

Điều đó sẽ chỉ ảnh hưởng đến định hướng thị giác và điều đó phụ thuộc hoàn toàn vào cách hình ảnh cho kết cấu được định hướng - Tôi không thể thấy điều đó ảnh hưởng đến vấn đề của mình.
Joe Shanahan

Đây có phải là Windows không? Nếu vậy, hãy đặt dự án để sử dụng cửa sổ bảng điều khiển (Dự án -> Tùy chọn dự án -> Ứng dụng -> Loại đầu ra) và in ra góc của bạn shuttleAngleđể xem liệu đó có dính ở các góc đó không
Joe Shanahan

2
wow công việc tuyệt vời someWritesReserved và mọi người khác, tôi thực sự ấn tượng với trang web này, phản hồi rất nhanh! Đây là bài viết đầu tiên của tôi vì vậy ai đó có thể vui lòng cho tôi biết tôi cần làm gì để ghi có đúng vào tất cả những người đã giúp đỡ không?
Hugh

Câu trả lời:


18

Có thể là do cách deadzone của GamePad hoạt động. Nó mặc định GamePadDeadZone.IndependentAxes, có nghĩa là mỗi trục được kiểm tra theo vùng chết riêng lẻ. Điều này có xu hướng làm cho đầu vào chụp theo từng trục của ngón cái tương tự. Thay vào đó, hãy thử sử dụng GamePadDeadZone.Circular:

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

Điều này sẽ cung cấp cho bạn kiểm soát mượt mà hơn trên cả hai trục. Kiểm tra trang MSDNbài viết này của Shawn Hargreaves .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.