データの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月