sample\sample_devmotion\
sample10_devmotion.hsp
#include "hsp3dish.as"
#include "ezlocal-dish-js.hsp"
ezLocalJS
#include "mod_dish-js-devmotion.hsp"
; ==============================
; HSP3.7β10 から一部のデバイスモーション値は標準で取得できるようになりました。
; jsdevm_accel_x, jsdevm_accel_y, jsdevm_accel_z
; jsdevm_orient_alpha, jsdevm_orient_beta, jsdevm_orient_gamma
; これらは『センサーを使用する』をチェックすることでHSP3のシステム変数から同じ値を取得することができます。
;
; 他のセンサー値も使用したい場合は mod_dish-js-devmotion.hsp を利用してください。
; このモジュールを利用する場合は『センサーを使用する』にチェックをしないでください。処理が重複してしまいます。
; ==============================
// デバイスモーション値の取得開始
JsdevmStart
; - iOSの場合は、ユーザーに画面をタップして貰ってデバイスモーションのアクセス許可(パーミッション)を取得する必要があります。
; - jsdevm_allowed で既に許可済みか確認できますが、#include直後はまだ判定できず jsdevm_allowed に値が反映されません。
; iOS向けに「画面をタップしてください」等の注記を書く場合は、jsdevm_allowed が「1」になったら消してください。
#if 0 // mesなしFPS確認用
#undef mes
#define mes(%1="",%2=0) logmes ""
celload "fps.png",1 : celdiv 1, 8, 8
#define mesfps(%1) fpslen=strlen(str.int(%1)):repeat 4:celput 1,10+cnt:loop:repeat fpslen,1:celput 1,(%1/(int.powf(10,fpslen-cnt)))\10:loop
gmode 3,,,256
#else
#define mesfps(%1) mes "FPS : "+(%1)
#endif
// 履歴
ddim ax, 100 : ddim ay, 100 : ddim az, 100
ddim gx, 100 : ddim gy, 100 : ddim gz, 100
ddim ra, 100 : ddim rb, 100 : ddim rg, 100
dim oa, 100 : dim ob, 100 : dim og, 100
*main
redraw 0 : color : pos 0,0
mes "加速度(X,Y,Z) : "
mes strf(" (% .02f, % .02f, % .02f) m/s^2",jsdevm_accel_x,jsdevm_accel_y,jsdevm_accel_z)
ax(i) = jsdevm_accel_x : ay(i) = jsdevm_accel_y : az(i) = jsdevm_accel_z
yy = ginfo_cy + 50
color 200,200,200 : line 10, yy, 410, yy
color 255,0,0 : pos 410, yy+int(ax((i-cnt+100)\100)*5) : repeat 100 : line 410-cnt*4, yy+int(ax((i-cnt+100)\100)*5) : loop
color 0,255,0 : pos 410, yy+int(ay((i-cnt+100)\100)*5) : repeat 100 : line 410-cnt*4, yy+int(ay((i-cnt+100)\100)*5) : loop
color 0,0,255 : pos 410, yy+int(az((i-cnt+100)\100)*5) : repeat 100 : line 410-cnt*4, yy+int(az((i-cnt+100)\100)*5) : loop
pos 0, yy + 50 : color
mes "加速度(X,Y,Z) [重力込み] : "
mes strf(" (% .02f, % .02f, % .02f) m/s^2",jsdevm_accel_gx,jsdevm_accel_gy,jsdevm_accel_gz)
gx(i) = jsdevm_accel_gx : gy(i) = jsdevm_accel_gy : gz(i) = jsdevm_accel_gz
yy = ginfo_cy + 50
color 200,200,200 : line 10, yy, 410, yy
color 255,0,0 : pos 410, yy-int(gx((i-cnt+100)\100)*5) : repeat 100 : line 410-cnt*4, yy-int(gx((i-cnt+100)\100)*5) : loop
color 0,255,0 : pos 410, yy-int(gy((i-cnt+100)\100)*5) : repeat 100 : line 410-cnt*4, yy-int(gy((i-cnt+100)\100)*5) : loop
color 0,0,255 : pos 410, yy-int(gz((i-cnt+100)\100)*5) : repeat 100 : line 410-cnt*4, yy-int(gz((i-cnt+100)\100)*5) : loop
pos 0, yy + 50 : color
mes "端末向きの変化速度(alpha,beta,gamma) : "
mes strf(" (% .02f, % .02f, % .02f) deg/s",jsdevm_rotate_alpha,jsdevm_rotate_beta,jsdevm_rotate_gamma)
ra(i) = jsdevm_rotate_alpha : rb(i) = jsdevm_rotate_beta : rg(i) = jsdevm_rotate_gamma
yy = ginfo_cy + 50
color 200,200,200 : line 10, yy, 410, yy
color 255,0,0 : pos 410, yy-int(ra((i-cnt+100)\100)*0.3) : repeat 100 : line 410-cnt*4, yy-int(ra((i-cnt+100)\100)*0.3) : loop
color 0,255,0 : pos 410, yy-int(rb((i-cnt+100)\100)*0.3) : repeat 100 : line 410-cnt*4, yy-int(rb((i-cnt+100)\100)*0.3) : loop
color 0,0,255 : pos 410, yy-int(rg((i-cnt+100)\100)*0.3) : repeat 100 : line 410-cnt*4, yy-int(rg((i-cnt+100)\100)*0.3) : loop
pos 0, yy + 50 : color
mes "端末の回転量(alpha,beta,gamma) : "
mes strf(" (% 04d, % 04d, % 04d) deg",jsdevm_orient_alpha,jsdevm_orient_beta,jsdevm_orient_gamma)
oa(i) = jsdevm_orient_alpha : ob(i) = jsdevm_orient_beta : og(i) = jsdevm_orient_gamma
yy = ginfo_cy + 50
color 200,200,200 : line 10, yy, 410, yy
color 255,0,0 : pos 410, yy-int(oa((i-cnt+100)\100)/4) : repeat 100 : line 410-cnt*4, yy-int(oa((i-cnt+100)\100)/4) : loop
color 0,255,0 : pos 410, yy-int(ob((i-cnt+100)\100)/3) : repeat 100 : line 410-cnt*4, yy-int(ob((i-cnt+100)\100)/3) : loop
color 0,0,255 : pos 410, yy-int(og((i-cnt+100)\100)/2) : repeat 100 : line 410-cnt*4, yy-int(og((i-cnt+100)\100)/2) : loop
mes ""
if jsdevm_allowed == 0 {
pos 5, yy + 50 : color 200,0,0
mes "iOS : ", 1
mes "画面をタップして"
mes "デバイスモーションのアクセス許可をしてください"
; - iOSで一度許可するとページ更新しても許可済みになります。
; 何度か確認したいときはブラウザのプライベートモードを活用してください。
}else {
// FPS表示
getreq t2, SYSREQ_TIMER
t3 = t2 - t1
if t3 >= 1000 : t1 = t2 : fps = count : count = 0
count++
pos 5, yy + 50 : color
mesfps fps
}
redraw 1
await (1000 / 60)
_i++ : i = (_i \ 300) / 3 ; 記録間隔調整
goto *main