5

私は初めて Hyperloop に足を踏み入れました。特に現在 Android 向けです。かなりうまくいっていますが、以下で説明する 1 つの問題がありました。

Sensor Manager へのハンドルを取得し、Sensor リスナー イベントをセットアップしてセンサーから値を取得することに成功しました。

誰かがここでそのコードを必要とする場合は、以下にあります

var AndroidAppPkg = require('android.app.*');
var AndroidHardware = require('android.hardware.*');
var Context = require('android.content.Context');
var Sensor = AndroidHardware.Sensor;
var SensorEvent = AndroidHardware.SensorEvent;
var SensorEventListener = AndroidHardware.SensorEventListener;
var SensorManager = AndroidHardware.SensorManager;
var Activity = AndroidAppPkg.Activity;
var Matrix = require('android.opengl.Matrix');

var activity = new Activity(Titanium.App.Android.getTopActivity());
var appContext = activity.getApplicationContext();

var obj = appContext.getSystemService(Context.SENSOR_SERVICE);

var sensorManager = SensorManager.cast( obj );

var sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);

Ti.API.info('Set up sensor event');
var sensorEvent = new SensorEventListener({
    onSensorChanged:function(event){
        // sensor values retrieve here
    }
});

私が問題を抱えているのは、参照渡しのパラメーターを含む Android Sensor Manager 関数の使用方法です。たとえばSensorManager.remapCoordinateSystem(float[] inR, int X, int Y, float[] outR)、out 配列 (回転行列) が含まれます。

私はこのアプローチを試しました

var outR = new Array(16).fill(0);
SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X, SensorManager.AXIS_Z, outR);
Ti.API.info(outR.join());

outR 配列は、初期化されたときと同じままです。この場合、16 個の 0 の配列です。同様の機能をいくつかテストしましたが、同じ結果が得られました。必要な SensorManager 関数をそれぞれ再作成し、変数を返すように関数を編集することで、この問題を回避できましたが、これを回避する方法があるのか​​ 、それとも単にハイパーループの制限なのか疑問に思っていましたか? ほんのわずかな違いで同じ機能を作り直すのは時間の無駄なので、何かを見落としていることを願っています。

ありがとう!

4

0 に答える 0