sample10_devmotion.hsp

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