簡體   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