DxOpalの画像読み込みの改良案を考えてみた
DxOpalでの開発がちょっと詰まっている。次のシーンに移動するときに画像の追加読み込みが出来ないからだ。かと言ってゲーム開始時にすべての画像を読み込むのも大規模なゲームになってくると現実的ではなかったりする。
というわででリソースの読み込みと管理を行っているRemoteResourceクラスを追加読み込みができるように改造してみた。……してみたがイマイチいけてない。
なにが問題なのか考えた結果、まずリソース読み込みと管理が一緒になっているのが個人的に好きではない。やっぱりリソースは自分で管理したいのだ。さらにImageクラスの基底になっているのも依存性が高くて不安になる。
そこでこの際、自分ならどんな仕様だったら使いやすいのかをイメージしてなるべくシンプルに実装してみる。
まずなるべくDxRubyの文法に近づけたいので。
image = Image.load('sample.png') Window.loop do Window.draw(x, y, image) end
上記と同じコードが動くようにする。ただし画像の読み込みは非同期なので、最初は1×1の空の画像が画面に表示されて、読み込み後に改めて画像が表示されるようになる(もうちょっと作り込めば待ち時間のないスムーズなインターフェースとか作れそうだが話が脱線するので次回)。
ちゃんと読み込んだ後に処理させたい場合はloadedフラグを追加したので
if image.loaded? Window.draw(x, y, image) end
こういう風に制御できるし、全部の画像を読み込んだあとに処理させたい場合は
resources = [] resources << Image.load('test.png') resources << Image.load('test2.png') Window.loop do if resources.all?(&:loaded?) ... else Window.draw_font(0, 0, "loading...", Font.default) end end
なんてこともできる。
あとはこれを実際にゲーム開発で使ってみて良いか悪いか判断してみようと思う。
0
ディスカッション
コメント一覧
まだ、コメントがありません