Siv3Dで学ぶHTTP通信 #1 ネット上の画像を取って来る
最近はもうどんな情報でもネットで調べれば出てくるし、なんにでもWebサイトがあるのが当たり前になりましたね。(なんかこの発言で年齢がばれる気がします、、、)ゲームやアプリもネットを通じてアップデートが行われたり、DLCコンテンツ、通信対戦などのネットと繋がる要素がない方がめずらしいほどになりました。
でも実際にやってみようとすると、難しい仕様の話が出てきたり、それはサーバー側のプログラムなのかクライアント側のプログラムなのか、てか結局何やればいいんだよってなって敷居が高いと思います。
ってことで何かを学ぶ時に便利なライブラリのSiv3Dを使って自分がHTTP通信を学ぶ様子を『Siv3Dで学ぶHTTP通信』としてお届けしようと思います!
HTTP通信とは?
ずばり、今あなたが見ているこのブログです!ブラウザのURLのところを見ると(隠れてる人は全体をコピペすると)たぶん「http://...」ってなってると思います。
正確にはブラウザはHTTP(HyperText Transfer Protocol)というルールに従ってURLで指定された場所のデータを取ってきて表示している訳です。まとめるとこんな感じです。
とりあえず、WebサーバーにURLでリクエストを飛ばしてレスポンスでデータをもらうと覚えればOKです。この一回で通信が終わるので簡単ですが、例えばリアルタイムで通信対戦を行うとかはちょっと難しいです。しかし、バージョンアップの確認やDLCコンテンツ、いろいろなWebアプリケーションとの連動を行うことが可能です。
ネット上の画像を保存する
まずは「名前をつけて画像を保存」をやってみましょう。Siv3DでHTTP通信を行いたいときはまずHTTPClientクラスのオブジェクトを作成します。そしてdownload関数にURLと保存先のパスをString型で渡してやります。保存する画像ですがURLさえわかればどんな画像も利用することが可能です。たとえば、、、
上の画像のURLは「http://f.st-hatena.com/images/fotolife/c/chunchunmorning/20150428/20150428232037.png」です。さっそくこの画像をSiv3Dでダウンロードしてみます。
このブログに表示されているのと同じ画像がアプリ上に現れたと思います。また、アプリのあるディレクトリを見ると「asachun.png」が保存されたはずです。
もちろん、このサイト以外の画像もURLを調べれば表示することが可能です。
ダウンロードした画像を直接使う
しかし、今回の場合のようにアプリで使いたいだけなら、ファイルに保存する必要はないですし、アプリ終了時に削除は面倒な上、トラブルが発生しそうです。
そういう時はファイルパスを渡すのではなくByteArray型を渡してやり、Texture型にはコンストラクタでファイルパスではなくこのByteArray型をstd::move関数で渡してやります。
これで、ファイルを介さずにネット上の画像をSiv3D上で使用することができました。
まとめ
とりあえず今回はHTTP通信を頑張れば何ができるのかと、実際に画像をダウンロードして使用することができるのがわかっていただけだと思います。
次回は画像以外のいろんなデータを扱う方法をやろうと思います。