sample04_yoko.hsp

sample\sample_yoko\ sample04_yoko.hsp

#include "hsp3dish.as"

#include "ezlocal-dish-js.hsp"
ezLocalJS

#packopt xsize 1040
#packopt ysize 480
	;
	;  HSP3同梱サンプル掛け合わせ
	;  sample\hsp3dish\ obaqtest.hsp + mtouch.hsp
	;
	;    一定時間ごとにオブジェクトを追加
	;    タッチでも追加(マルチタッチ情報表示)
	;
	screen 0, 1040, 480
	randomize		; 乱数の初期化
	title "OBAQ Test"

	qreset			; OBAQの初期化
	frame=0
	boxmax=30
	boxnum=0
	dim boxids, 1
	mtcnum=0 : mae_mtcnum=0
	key=0 : touch=0 : touchid=0
	my=0 : gx=0 : gy=0 : ga=0
	data="" : dummy=""

	pos 1040-150,30 : objsize 80, 30       ; ボタン表示
	button goto "終了ボタン", *quit  ; アプリの終了 & データ保存

	gosub *data_load  ; 保存したデータがあれば読み込み

*main
	;	メインループ
	;
	stick key,15              ; キーの取得
	if key&128 : goto *quit   ; [ESC]キーで終了 & データ保存

	redraw 0                  ; 画面の更新を開始
	gradf ,,,,1,0,128         ; 画面クリア
	qexec                     ; OBAQによるオブジェクトの更新

	mtlist touchid            ; マルチタッチ
	mtcnum=stat
	if mae_mtcnum < mtcnum {  ; タッチしたらframeのカウントをゼロにしてオブジェクト投下
		mtinfo touch, touchid(0)
		if touch(1) < (1040-130) || touch(2) > 65 : frame = 0    ; ただし終了ボタン周りのタッチはカウントリセットしない
	}
	mae_mtcnum = mtcnum
	;	一定時間ごとに出現
	if boxnum<boxmax {
		if frame\100=0 {
			qaddpoly my, 4, 32+96*(boxnum\3),24,0	,,,0  ; 多角形を追加
			if my >= 0 {
				boxids(boxnum) = my
				qspeed my,0.1*rnd(10)-0.5,0,0.01          ; ランダムな方向に飛ばす
				boxnum++
			}
		}
	}else {
		;	ボックス最大になったらボッシュート
		if boxnum == boxmax : qborder -117,-54,117,500 : boxnum++    ; 外壁の底を外す
		repeat boxmax
			qgetpos boxids(cnt), gx, gy, ga : if gy < 250 : break  ; オブジェクト全て落ち切ってるか確認
		loop
		if gy >= 250 : qreset : boxnum = 0  ; obaqリセット
	}
	
	qdraw			; オブジェクトの描画

	gfilter 1
	color 255,255,255
	pos 60,0:mes "Frame:"+frame     ; フレーム数を表示
	mes "("+mousex+","+mousey+")"  ; マルチタッチ情報を表示
	y=16
	repeat mtcnum
		id = touchid(cnt)
		mtinfo touch,id
		mes "T:"+id+"("+touch(1)+","+touch(2)+") "+touch(3)
		y+=10
	loop
	gfilter 0
	
	redraw 1        ; 画面の更新を終了
	await 12        ; 一定時間待つ
	frame++
	goto *main


// 保存したデータがあれば読み込み
*data_load
	exist "save/frame.txt"
	if strsize == -1 : return
	notesel data
	noteload "save/frame.txt"
	frame = int(data)  ; カウントしているframeを前回の続きからにしている
	return

// (Escキーor終了ボタン)アプリ終了前にdata保存
*quit
	dirlist dummy,"save",5 : if stat == 0 : mkdir "save"  ; ← Windowsアプリとして実行するとき用に
	data = ""+frame
	notesel data
	notesave "save/frame.txt"
	devcontrol "syncfs"
	dialog "「ブラウザ上にデータ保存できるようにする」を選択している場合Frameが保存され次回起動時に引き継がれます"
	end