将设备倾斜映射到玩家角色(等)的移动行为

4
上下文是一个iPad游戏,我希望屏幕上的对象可以通过设备的X/Y倾斜来控制。
我想知道是否有人可以为我提供资源,以便决定适当的倾斜映射到移动行为(例如,人们是否倾向于使用“原始”旋转值来控制加速度、速度或直接位置,以及玩家对这些不同类型的设备旋转到对象移动的“映射”有多舒适)。
我知道适当的选择可能取决于所控制的特定类型的游戏/对象,并且需要一些试错,但我想知道至少有哪些现有的知识可供参考。
3个回答

3

首先,您需要应用低通滤波器来从噪声和用户的抖动手中分离出倾斜,苹果在其加速度计示例中展示了这一点。

x = accel.x * alpha + x * (1.0 - alpha);
y = accel.y * alpha + y * (1.0 - alpha);

更大的alpha会导致更高的响应性,但代价是输入更加嘈杂。除非你的游戏有意模拟在屏幕上平衡的球,否则你可能不想将倾斜值应用于加速度,而是应该应用于目标速度或目标位置,并应用“虚假”的平滑加速度将其带到那里。此外,这个回答提出了一个巧妙的想法,如果Unity3d适用于你的项目的话,而这篇论文提供了一些实际使用倾斜控制作为输入的局限性的有用数字,其中包括重要的观点,即用户控制绝对角度位置比倾斜速度容易得多。

0
所以,我们希望根据加速度计的x和y数据移动我们的角色——我们称之为“loco”。
现在,如果我们确实希望倾斜幅度影响loco运动的速度,我们可以直接将加速度计的x或y值纳入到他的运动算法中。
例如:(伪代码)
// we'll call our accelerometer value for x 'tiltX'
// tiltX is .5; // assume that accelerometer updated the latest x value to .5
// unitOfMovement = 1; // some arbitraty increment you choose for a unit of movement

loco.x += unitOfMovement * tiltValueX;

这将导致loco在每个游戏周期(或您正在驱动移动更新的周期)移动该像素数,这里的1像素乘以加速度计值。因此,如果角色通常在完全倾斜X(1.0)时向右移动1像素,则如果tiltX从加速度计输入为0.5,则loco将移动一半。当tiltX的值增加时,Loco的移动也会增加。

另一个考虑因素是您是否希望将运动直接绑定到加速度计事件的速率?可能不是,因此您可以使用数组仅保存由加速度计发送的最后十个x值(y值的概念相同),并在每个游戏循环中使用数组的最新平均值(x值之和/数组元素数)。这样,灵敏度将感觉更合适,而不是通过加速度计的更新速率来驱动运动。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接