sample.hsp
sample\
sample.hsp
#include "hsp3dish.as"
#include "ezlocal-dish-js.hsp"
ezLocalJS
#packopt xsize 480
#packopt ysize 800
;
; HSP3同梱サンプル掛け合わせ
; sample\hsp3dish\ obaqtest.hsp + mtouch.hsp
;
; 一定時間ごとにオブジェクトを追加
; タッチでも追加(マルチタッチ情報表示)
;
screen 0, 480, 800
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 380,5 : 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) < 350 || touch(2) > 40 : frame = 0 ; ただし終了ボタン周りのタッチはカウントリセットしない
}
mae_mtcnum = mtcnum
; 一定時間ごとに出現
if boxnum<boxmax {
if frame\100=0 {
qaddpoly my, 4, 32+32*(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 -54,-90,54,500 : boxnum++ ; 外壁の底を外す
repeat boxmax
qgetpos boxids(cnt), gx, gy, ga : if gy < 250 : break ; オブジェクト全て落ち切ってるか確認
loop
if gy >= 250 : qreset : boxnum = 0 ; obaqリセット
}
qdraw ; オブジェクトの描画
color 255,255,255
pos 0,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
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
// ★★★ ユーザーのブラウザへのデータ保存方法について ★★★
// HTML調整オプション「ブラウザ上にデータ保存できるようにする」を指定するとsaveフォルダのような物が作られそこに保存できるようになる。
// ・「save/ファイル名」を指定してテキスト等を保存できる。
// ・フォルダを含めたファイルパスを指定する場合「\\」ではなく「/」を使用する。
// ・「chdir "save" : notesave "frame.txt"」などカレントフォルダの移動が可能。
// ・chdir "/save" とすると絶対パス扱いで一番親であるsaveフォルダに移動できる。
// (chdir "/" でsaveフォルダの1つ上のフォルダに移動できる。起動時の初期位置)
// ・保存を有効にするために必ず「devcontrol "syncfs"」を実行する必要がある。
;dirlist dummy,"save",5 : if stat == 0 : mkdir "save" ; ← Windowsアプリとして実行するとき用。
data = ""+frame
notesel data
notesave "save/frame.txt"
devcontrol "syncfs"
dialog "「ブラウザ上にデータ保存できるようにする」を選択している場合Frameが保存され次回起動時に引き継がれます"
end
// ・ブラウザに保存されているデータを確認したい場合は、ブラウザ(ここではMicrosoft Edge)の メニュー>その他のツール>開発者ツール を起動。
// 「要素」「コンソール」などの並びの後ろのほうにある「アプリケーション」タブを開き ストレージ>IndexedDB>/save>FILE_DATA を確認すると
// 「キー」と「値」が表示され、これが「ファイル名」と「データ」に相当する。
// 「contents: Int8Array」のところでメモリダンプのような形で確認でき、その行の右端の方にある小さいアイコン「メモリインスペクターパネルで表示」
// をクリックすると画面下部に詳細が表示される。
// アルファベットなどは確認できるが日本語は表示されない。メモリを見るにUTF-8文字列で保存されている模様。ここに表示されないだけで日本語でもちゃんと取り出せる。