私は初めて 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 関数をそれぞれ再作成し、変数を返すように関数を編集することで、この問題を回避できましたが、これを回避する方法があるのか 、それとも単にハイパーループの制限なのか疑問に思っていましたか? ほんのわずかな違いで同じ機能を作り直すのは時間の無駄なので、何かを見落としていることを願っています。
ありがとう!