GMS2:技術的備忘録・バッファセーブその後
どうも、Master.typeXです。
バッファセーブのその後に教わった情報をば
忘れないうちにメモしておこうと思います。
一応前回からの続きなので
軽く目を通して頂けるとわかり・・・
いや、わからん部分が多すぎるがな。
さて、今回はbuffer_seekについてです。
//バッファの読み込み開始
buffer_seek(buff,buffer_seek_start, 0);
これの3つ目の部分をある方から教えてもらったのですが
ここはバッファの読み込み開始位置
らしいでございます。
しかしここからが重要ポイント。
最初てっきりfor文みたいに0から始まる
いわゆるインデックス・・・通し番号と
思っていたのですが全く違いますた。
ここは開始バイト数が入ります。
なんのこっちゃかと最初思いましたが
例えば前回にも書いたこの文。
//バッファ書き込み
buffer_write(buff,buffer_s16,data);
これだと2バイトとして扱われます。
いや、余計なんのこっちゃ
安心しろ、俺も最初わからなかった。
真ん中のバッファの型「buffer_s16」が
16ビット整数という扱いのため
バイトに変換すると2バイトになるということです。
わかんない時はそこはグーグル先生に
「16ビット バイト 変換」と入れると
すぐ答えが帰ってきます。
というかバイト変換まで出来るとかグーグル先生すげぇ。
このバッファの型には色々と種類がありますが
そこはGMS2のマニュアルのバッファの部分を参照のこと。
で、この開始バイト数を入れると
そのバイト数データをずらした状態で
読み込みを開始するようになります。
例えば下記のように保存して
//player id
buffer_write(buff,buffer_s16,global.Ply_ID);
//lastplaystage
global.Ply_Lastplay = _Stage;
buffer_write(buff,buffer_s16,global.Ply_Lastplay);
//Scene
buffer_write(buff,buffer_s16,global.Ply_Scene);
Sceneの部分だけ取り出すには
4バイト分ずらせばいいので
buffer_seek(buff,buffer_seek_start, 4);
global.Ply_Scene = buffer_reed(buff,buffer_s16);
という記述になります。
・・・自分で書いていて
非常に分かりづらいなこれ・・・
ともあれ、こうすればずらせるので
なんとかバッファセーブの実装に
こぎつけそうになりましたと、そういうことで!
(無理矢理)
とりあえず今回はこのへんで!