对于android来说,访问方向滚动数据是不可靠的
因此,我正在为android创建一个游戏,它使用设备的滚动来设置主要角色的位置。每次运行.onSensorChangedevent方法时都会更新该位置。问题是,即使我运行我的应用程序并将手机放在桌面上,数值也会发生大约两度的显著变化。收集到的数据的灵敏度似乎也不是很精确,因为角度的差异似乎每次变化都以0.4度的增量递增。使用对于android来说,访问方向滚动数据是不可靠的,android,orientation,pitch,Android,Orientation,Pitch,因此,我正在为android创建一个游戏,它使用设备的滚动来设置主要角色的位置。每次运行.onSensorChangedevent方法时都会更新该位置。问题是,即使我运行我的应用程序并将手机放在桌面上,数值也会发生大约两度的显著变化。收集到的数据的灵敏度似乎也不是很精确,因为角度的差异似乎每次变化都以0.4度的增量递增。使用 Log.e(TAG, "roll: " + event.values[2]); 顺序度输出如下所示: roll: 2.265 roll: 2.265 roll: 2.2
Log.e(TAG, "roll: " + event.values[2]);
顺序度输出如下所示:
roll: 2.265
roll: 2.265
roll: 2.265
roll: 1.843
roll: 2.265
roll: 2.265
roll: 2.75
roll: 2.265
我还实现了这个算法来限制我的角色在屏幕上的移动,但这还不够,而且严重限制了角色移动的速度和对当前滚动数据的响应。我希望角色在滚动方面的位置尽可能接近1-1
public void onSensorChanged(SensorEvent event)
{
if (event.sensor.getType() == Sensor.TYPE_ORIENTATION)
{
float newX = -(int)event.values[2] * CCDirector.sharedDirector().displaySize().width/10.0f +
CCDirector.sharedDirector().displaySize().width/2.0f;
sam.updatePosition(newX);
Log.e(TAG, "roll: " + event.values[2]);
}
}
public void updatePosition(float newX)
{
float winSizeX = CCDirector.sharedDirector().displaySize().width;
float contentWidth = this.sprite.getContentSize().width;
//tries to eliminate jumpy behaviour by the character by limiting his speed
double tolerance = 0.01;
if (Math.abs(newX - this.sprite.getPosition().x) > winSizeX * tolerance)
newX = this.sprite.getPosition().x - ((this.sprite.getPosition().x - newX) * 0.1f);
this.sprite.setPosition(newX, this.sprite.getPosition().y);
}
我想知道这是正常的还是我正在索尼Xperia Play上测试的手机
谢谢你的意见 如何在运行中平滑数据
它会有一点滞后,但不会引起注意
另一方面,我不会使用诸如roll之类的工具。只是将其编辑到问题中。我已经将这个位置移动限制算法纳入了问题中,但有太多的滞后。我没有遇到来自您链接的问题。我不希望任何人在极端的方向上玩游戏,因此不会有不稳定的角度行为问题。