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,然后将其用作旋转角度参数(以弧度为单位)以绘制往复运动。

由于某些原因,当我旋转Sprint时,它在0、90、180和270度的角度感觉发粘。它想以这些角度解决。这并不能像在使用类似机制的游戏中那样给我流畅自然的旋转。PS:我的Xbox控制器很好!


1
Atan2是否先获取Y值,然后获取X值?msdn.microsoft.com/zh-CN/library/system.math.atan2.aspx。您需要先交换x和y值。您还考虑过通过插值来简化值吗?toValue-CurrentValue的/速度
Sidar

对不起,我的意思是newShuttleAngle-oldShuttleAngle /速度。
Sidar 2012年

那只会影响视觉定向,而这完全取决于纹理图像的定向方式-我看不到这会影响他的问题。
Joe Shanahan 2012年

这是Windows吗?如果是这样,则将项目设置为使用控制台窗口(项目->项目选项->应用程序->输出类型),然后打印出您的角度shuttleAngle以查看该角度是否
仍然存在

2
出色的工作SomeWritesReserved和其他所有人,这个网站让我印象深刻,反馈是如此之快!这是我的第一篇文章,所以有人可以告诉我我需要做些什么来适当赞扬所有帮助过的人吗?

Answers:


18

可能是因为GamePad的死区是如何工作的。默认为GamePadDeadZone.IndependentAxes,这意味着将分别针对死区检查每个轴。这往往会导致输入捕捉到模拟指尖的每个轴。相反,请尝试使用GamePadDeadZone.Circular

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

这将使您在两个轴上的控制更加流畅。查阅MSDN页面Shawn Hargreaves的这篇文章

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.