C言語とDXライブラリを使っています。
ifとelseを使って描画している画像を切り替えることができたのですが、キーを放すと切り替えが無効になってしまいます。
(押している間だけ切り替わります)
キーを押したら次の画像に移り、最後まで行ったらまた最初の画像に戻るというプログラムを作りたいのですがどうしたら良いのでしょうか?
素人ながらなんとなく初歩的な問題な気がしているのですが、自分の力では調べても解決方法が分かりませんでした。
また、同じやり方で動画を映してみたのですが、切り替えても全ての映像が流れ続けてしまっていました。
(隠れている動画の音まで聞こえ続けていました)
お力をお貸しいただけると助かります。
画像や動画の切り替え方法
Re: 画像や動画の切り替え方法
> キーを押したら次の画像に移り、最後まで行ったらまた最初の画像に戻るというプログラムを作りたいのですがどうしたら良いのでしょうか?
「キーを押す」度に表示する画像を切り替える という話なのであれば,
表示を行う処理の部分は
ある瞬間にそのキーが押されているかどうか?なんてことには関与する必要は無く,
とにかく「今現在表示すべき画像っていうのはコレ」という情報(の現在値)に基づいた表示を行っていればよいだけなのでは.
そのライブラリを知らんから,具体的な型とか処理コードは示せないけども,例えばこんな話かと.
「キーを押す」度に表示する画像を切り替える という話なのであれば,
表示を行う処理の部分は
ある瞬間にそのキーが押されているかどうか?なんてことには関与する必要は無く,
とにかく「今現在表示すべき画像っていうのはコレ」という情報(の現在値)に基づいた表示を行っていればよいだけなのでは.
そのライブラリを知らんから,具体的な型とか処理コードは示せないけども,例えばこんな話かと.
int main()
{
//ここではなんか画像データが3個あるのだとして…
画像データ Images[3] = { ... }; //具体的にどうやるのか知らんがまともな状態にセットアップするのだとして
//今現在,↑の3個の画像のうちのどれを表示するべきなのか? を示す変数を用意すれば…
int CurrentImageIndex = 0; //表示すべき画像とは Images[ CurrentImageIndex ] である,という意味の変数
//多分何かメインループがあって
while( ... )
{
...
//ここらへんに,「キーが押された」なら CurrentImageIndex の値を更新する処理でもいれる
if( キーが押された ){ CurrentImageIndex = ( CurrentImageIndex<(3-1) ? CurrentImageIndex+1 : 0 ); }
...
//表示する場所では,↑で決めたルールに従って単に表示しとけばいい
表示する( Images[ CurrentImageIndex ] );
}
...
}
Re: 画像や動画の切り替え方法
変数値の切替の部分:
> ( CurrentImageIndex<(3-1) ? CurrentImageIndex+1 : 0 );
の書き方が「何なの?」っていう場合,これをもっと素直(?)に書くなら
とかだ.
こんなのは意味さえわかればどう書いてもよいので,たまたま示した記述例にこだわらなくて良い.
こういう場合に,剰余を用いて とか書くのも良く見るが,個人的には好きではない.(何か無意味な演算コストが生じているような気がするので.)
---
言うまでもない話だが,「キーが押されたら」の判定はまともにやるべし.
例えばここを「今現在キーが押されているか」とかいう判断にしてしまうとすっごい勢いで切り替わることになる.
キー状態の変化点を検出するための実装を用意されたい.
> ( CurrentImageIndex<(3-1) ? CurrentImageIndex+1 : 0 );
の書き方が「何なの?」っていう場合,これをもっと素直(?)に書くなら
//とりあえず1個次に進める
++CurrentImageIndex;
//でも,有効な値は {0,1,2} だけなので,↑のインクリメントで3になっちゃった場合には 0 に戻す
if( CurrentImageIndex==3 ){ CurrentImageIndex=0; }
こんなのは意味さえわかればどう書いてもよいので,たまたま示した記述例にこだわらなくて良い.
こういう場合に,剰余を用いて とか書くのも良く見るが,個人的には好きではない.(何か無意味な演算コストが生じているような気がするので.)
---
言うまでもない話だが,「キーが押されたら」の判定はまともにやるべし.
例えばここを「今現在キーが押されているか」とかいう判断にしてしまうとすっごい勢いで切り替わることになる.
キー状態の変化点を検出するための実装を用意されたい.
Re: 画像や動画の切り替え方法
懸念通りキーが物凄い速さで切り替わってしまう問題は残っているのですが、usao様が教えてくれた方法を試してみたら無事に画像が切り替わりました!
ベストなアドバイスをありがとうございます。^^
ベストなアドバイスをありがとうございます。^^
Re: 画像や動画の切り替え方法
お聞きしたいことがございます。
画像を切り替えることには成功したのですが、ソフトを開いた時に前回最後に開いていた画像から表示させる方法を教えていただけないでしょうか?
画像を切り替えることには成功したのですが、ソフトを開いた時に前回最後に開いていた画像から表示させる方法を教えていただけないでしょうか?
Re: 画像や動画の切り替え方法
・終了時 (無駄な書き込みを避けられるが、強制終了に弱い)
・画像を切り替えた時 (強制終了に強いが、書き込みが多くなる)
・終了時+その他のトリガ (ハイブリッド)
などのタイミングで開いている画像をどこか (ファイル or レジストリ or サーバ など) に保存しておき、
ソフトを開いた時に保存した情報を読み出し、それに基づいて表示する画像を決定するようにするといいと思います。
「その他のトリガ」としては、
・最後の画像の切り替えから一定時間経過
・前回の保存から一定時間経過し、かつその間に画像の切り替えがあった
・重要な画像の切り替えをした
などが考えられます。
・画像を切り替えた時 (強制終了に強いが、書き込みが多くなる)
・終了時+その他のトリガ (ハイブリッド)
などのタイミングで開いている画像をどこか (ファイル or レジストリ or サーバ など) に保存しておき、
ソフトを開いた時に保存した情報を読み出し、それに基づいて表示する画像を決定するようにするといいと思います。
「その他のトリガ」としては、
・最後の画像の切り替えから一定時間経過
・前回の保存から一定時間経過し、かつその間に画像の切り替えがあった
・重要な画像の切り替えをした
などが考えられます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 画像や動画の切り替え方法
返答ありがとうございます!
自分はまだ素人で、それを実行できるかは分からないのですが、なんとなく理解しました。
(具体的な方法を一度調べてみます)
自分はまだ素人で、それを実行できるかは分からないのですが、なんとなく理解しました。
(具体的な方法を一度調べてみます)