繁体   English   中英

LibGDX光传感器数据

[英]LibGDX light sensor data

我正在使用LibGDX制作桌面/ Android应用程序。 在我的应用程序的一部分中,我正在检查光传感器是否为android。 这对于android来说很好用,除非当我将其实现到我的LibGDX项目中时,我对如何传递数据感到困惑。

SensorManager sm;
Sensor s;
float lux = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
s = sm.getDefaultSensor(Sensor.TYPE_LIGHT);
initialize(new MyLibGDXMain(), cfg);
}

@Override
public void onSensorChanged(SensorEvent event) {
lux = event.values[0];
}

我可以在这里检索我的光传感器数据,但是一旦初始化MyLibGDXMain,我就会丢失这些数据。 如果将SensorEventListener添加到该类,则将失去与桌面版本的兼容性。 因此,我尝试为MyLibGDXMain创建另一个构造函数以传递lux值,但这只会破坏LibGDX应用程序正在执行的操作。

这个问题不是如何在android上检索传感器数据,而是如何在不破坏与桌面项目的兼容性的情况下将该传感器数据放入我的LibGDX主文件中?

您将需要在应用程序和特定于平台的代码之间创建接口。

https://github.com/libgdx/libgdx/wiki/Interfacing-with-platform-specific-code

一种方法是在主项目中创建一个接口LightSensorInterface ,其中包含一个方法float getCurrentLux(); LightSensorInterface

public interface LightSensorInterface {
    public float getCurrentLux();
}

然后,您将不得不创建一个类,该类在您的android项目中实现该接口,并且在您的桌面项目中也实现该接口。

public class AndroidLightSensor implements LightSensorInterface, SensorEventListener {
    private float currentLux = 0;

    @Override
    public float getCurrentLux() {
        return currentLux;
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        this.currentLux = event.values[0];
    }
}

由于您的桌面应用程序上没有光传感器,因此此处实现的方法可能只返回一些固定值。

android项目中实现的getCurrentLux()需要返回您上次调用onSensorChanged()时获得的勒克斯值。

MyLibGDXMain()的构造函数将需要对LightSensorInterface的引用,并且在初始化应用程序时,您将传递平台特定的类:

onCreate() {
     ....
    AndroidLightSensor sensor = new AndroidLightSensor(...);
    initialize(new MyLibGDXMain(sensor);
}

如果您希望始终拥有当前值,则需要在渲染循环中获取当前值...希望您能理解我的意思...

希望能帮助到你.. ::)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM