所以我正在为 android 创建一个游戏,它使用设备的滚动来设置主角的位置。每次运行 .onSensorChanged(event) 方法时都会更新位置。问题是,即使我运行我的应用程序并将手机放在桌面上,这些值也会发生显着变化(大约两度)。收集到的数据的灵敏度似乎也不是很精确,因为角度的差异似乎每次变化都会增加约 0.4 度。使用
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);
}
我想知道这是正常的还是我正在测试的手机(Sony Xperia Play。)
感谢您的任何意见。