Game Maker Language リファレンス > 組み込み関数 用途別 > Steam API > Steam非同期イベントについて
ここではSteam APIのコールバックイベントについて説明をします。
このイベントはSteam API関数によりds_map(key/valueを持つ)のasync_load変数を返します。
次のキーは、コールバックを生成する関数を呼び出すことでds_mapに格納されます
変数"async_load"は非同期イベントのみ有効な変数で、イベント開始時に作成され、失敗時(-1)には自動的に削除されます。ただし正常に取得できた場合、それらのデータを適切にクリーンアップする必要があります。詳細は次のセクション、例を参照してください。
この例では、"game scores"のトップ10の取得を要求し、steam非同期イベントで結果を解析します。
score_get = steam_download_scores("game scores", 1, 10);
これは変数"score_get"にリクエストの非同期idを格納し、steamサーバーにスコア取得の要求を送ります。その後、次のようにしてsteam非同期イベントを処理します
var async_id = ds_map_find_value(async_load, "id"); if async_id == score_get { var entries = ds_map_find_value(async_load, "entries"); var map = json_decode(entries); if ds_map_exists(map, "default") { ds_map_destroy(map); exit; } else { var list = ds_map_find_value(map, "entries"); var len = ds_list_size(list); var entry; for(var i = 0; i < len; i++;) { entry = ds_list_find_value(list, i ); steam_name[i] = ds_map_find_value(entry, "name"); steam_score[i] = ds_map_find_value(entry, "score"); steam_rank[i] = ds_map_find_value(entry, "rank"); ds_map_destroy(entry); } ds_list_destroy(list) } ds_map_destroy(map) }
ここでやっていることは最初に非同期処理用の特別なds_map変数"async_load"に格納されている"id"と変数"score_get" を比較しています。これが一致すればsteamの非同期イベントとなります。取得した値"entries"はjson形式のデータであるため、json_encode()を使用して、ds_mapに変換しています。
このds_mapに"default"が存在しない場合、不正な値のため処理を中断します。正しく取得できれば、さらにこのds_mapから"entries"を取り出します。この値はds_listとなり、名前・ランキング・スコアに対応したds_mapを取得できます。
情報を取得できたら、ds_list / ds_map は不要なので削除します。async_loadはGameMaker:Studioが管理する領域なので、破棄する必要はありません