データのsave&load
exec命令でjavascript
HSP3.7β8現在、WEBGLでの静的なデータのsaveとloadについては、公式にはできないとなっています。
しかし、それでは不便なので、いくつかの方式を検討します
①復活の呪文方式 (ユーザーにゲームデータのパスワードを入力させる)
ゲーム画面内でデータの引継ぎパスワード、いわゆる復活の呪文を入力させる方式です。ただし、クリップボードを経由した自動入力はできないようなので、本当にファミコン時代のようになってしまい、ユーザーには不評でしょう。
②ローカルストレージ方式
HSPの「EXEC命令」は、WEBGL実行中にjavascriptを実行する機能があります。
この機能により、ブラウザのローカルストレージ機能にアクセスし、値の保存と読み出しを行います。公式にはサポートされていませんが、非常に簡単で有用な方法です。早く公式にサポートして欲しい機能です。
★セーブする場合
exec "localStorage.setItem('buhio_data',"123456");"
execでjavascript実行でローカルストレージにKeyと値を指定して保存します。簡単♡
★ロードする場合
sdim strbuf, 1024
ptr = varptr(strbuf)
exec "const ptr = " + ptr + {";
const str = localStorage.getItem('buhio_data');
stringToUTF8Array(str, Module.HEAP8, ptr, 1024);"}
value = int(strbuf)
ロードは少し工夫が必要です。文字列変数を用意し、varptr関数でポインタを取得します。 そのポインタをjavascriptに埋め込み、ローカルストレージからデータを取得させた後、utf8変換関数でポインタに書き込みます。
こうすることで、javascriptの計算結果をHSPに取り込むことができるようです。上記の手法を使えば、ブラウザにデータを保管することができ、WEBページを開いたときに自動的にセーブデータを読み出すことも可能になります。
・ブラウザを閉じてもデータが失われない
・ブラウザの開発者ツールで値を確認できる
・ユーザーに丸見えなので、暗号化が必要な場合がある
という点もポイントです。
この方法は、webglの生みの親のzakkiさんからの情報ですが、公式の手法ではないため、今後のバージョンアップに期待と注意が必要です。
(参考) https://hsp.tv/play/pforum.php?mode=pastwch&num=95742#95745
https://hsp.tv/play/pforum.php?mode=all&num=92295#92934
2024年6月