loding画像について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
siratomi

loding画像について

#1

投稿記事 by siratomi » 16年前

はじめまして。
「龍神録プログラミングの館」を参考にSTGを作らせてもらっています。

今回は表題の通り、loding画像について分からないことがあったので質問させていただきます。
ゲームの最初には大抵ロードがあると思いますが、そこでloding...と描かれた画像を
アニメーションで表示させたいのです。(東方の「少女祈祷中」のようなものです。)

ロード画面ではロードをさせている以上、画面の更新はできないのではないかと思います。
したがって、壁紙は更新をする必要がないので表示できるのですが、
自ら画像をループさせてアニメーションにしようとすると更新が必要になってしまい表示できません。
また、GIFアニメーション、PNGアニメーションをあらかじめ作っておき、それを表示することも考えました。
しかし、GIFはDXライブラリが未対応、PNGは挑戦してみましたがうまく表示されません。
動画を表示するということに関しては、重くなりそうなので避けたいと思っています。

私としてはこれ以上方法が思いつきません。
他に良い方法はないでしょうか?
分かりにくい文章かとは思いますが、どうかお願いします。

DVDM

Re:loding画像について

#2

投稿記事 by DVDM » 16年前

>>siratomiさん
ぱっと思いつく方法で二つあります。
一つはこんな感じです。

画像1読み込み
アニメさせる画像を表示(アニメ1)
画像2読み込み
アニメさせる画像を表示(アニメ2)
画像3読み込み
アニメさせる画像を表示(アニメ3)

このように読み込みんでは表示、読み込んでは表示する方法です。


もう一つはマルチスレッドを使う方法です。
片一方のスレッドでアニメーションを描画し、もう片一方のスレッドでロードする方法です。
こちらの場合は、方法1みたいに交互に書く必要はなくロード関数とアニメ関数を別スレッドに処理させればOKです。

Justy

Re:loding画像について

#3

投稿記事 by Justy » 16年前


>他に良い方法はないでしょうか?

 一番簡単なのは、DXライブラリの非同期読み込み関数を使ってファイルの内容を
メモリに読み出すことでしょう。

 FileRead_openの第二引数 TRUEにして、FileRead_read()を行えば読み込みが
非同期になりますので、読み込みの完了を FileRead_idle_chk()で毎フレームチェックして
TRUEが返ってくれば読み込み完了となります。

 もし、この読み込んだデータが画像データなどのDXライブラリで扱うデータとする場合は、
CreateGraphFromMem()などのメモリからハンドルを作成する関数を使えば
各種ハンドルにすることができます。

 ただ、非同期なだけに一端 FileRead_readを使って読み出したのなら、
読み込みが終わるまで FileRead_readで指定したバッファを保持していなければならないことや
キャンセル機能がないので注意が必要です。


 あと、自前でスレッドを作って同様のことを行うこともできますが、
DXライブラリ最新版(2.25b)においては、スレッドセーフではなくなっているので
マルチスレッドで LoadGraphなどのDXライブラリの関数を使う場合は注意が必要です。

siratomi

Re:loding画像について

#4

投稿記事 by siratomi » 16年前

>>DVDMさん
一つ目の方法は単純で分かりやすくて良いのですが、
画像の重さによってはアニメーションが止まりそうですね・・・。
しかし、やはり一番扱いやすい方法ではあるので参考にさせていただきます。

>>Justyさん
最初の方法は動作については、ご指摘くださった点に注意すれば確実そうですね。
ちょっと複雑そうなので、うまくいくかが心配ですがとりあえずこの方法を中心に考えてみたいと思います。


お二人ともマルチスレッドを使用することについても書いてくださっていますが、
今回はJustyさんの書き込みを参考にして、やめておくことにしました。

大まかではありますが、方針が見えてきましたのでこれにて解決とさせていただきます。
DVDMさん、Justyさんご教授ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る