Re: gif動画をスムーズに再生するために背景で、バッググランドで再生したい! ( No.1 ) |
- 名前:マーク42 日時:2020/06/01 22:30
度々すいません。
あるフレーム数まで到達したらgif動画が最初から再生されるように作りたかったため、
こちらのサイトに書いてあるように途中から再生されたりと最初から再生してくれないので
関数int PlayMovieToGraph( int GraphHandle ) ;を使おうと考えました。
注意書きの なのでもし動画の映像に合わせて何かを行う処理をする場合は TellMovieToGraph を使用して動画の再生時間に合わせて処理を行う必要があります。
を読んだのですが再生時間に合わせるとはどういうことなのでしょうか?
以下のサンプルを見ましたが、TellMovieToGraphという関数により動画が描画され終わるまでどれくらいかかるかを計測していると思うのですが、
TellMovieToGraphの関数をどのように使えば、どのように書けばちゃんと最初から動画が実行されるのでしょうか?
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int MovieGraphHandle ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが発生したら終了
}
// ムービーファイルをロードします。
MovieGraphHandle = LoadGraph( "??.mpg" ) ;
// ムービーを再生状態にします
PlayMovieToGraph( MovieGraphHandle ) ;
// 描画先の画面を裏画面に
SetDrawScreen( DX_SCREEN_BACK ) ;
// ループ、GetMovieStateToGraph 関数はムービーの再生状態を得る関数です
// 戻り値が1の間は再生状態ですのでループを続けます
while( ProcessMessage() == 0 && GetMovieStateToGraph( MovieGraphHandle ) == 1 )
{
// ムービー映像を画面いっぱいに描画します
DrawExtendGraph( 0 , 0 , 640 , 480 , MovieGraphHandle , FALSE ) ;
// 画面左上に再生時間を描画します
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Time:%d", TellMovieToGraph( MovieGraphHandle ) ) ;
// 裏画面の内容を表画面に反映します
ScreenFlip() ;
}
// 読み込んだムービーファイルのグラフィックハンドルの削除
DeleteGraph( MovieGraphHandle ) ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
//dxlib.xsrv.jp/function/dxfunc_graph3.html#R14N2
|
Re: gif動画をスムーズに再生するために背景で、バッググランドで再生したい! ( No.2 ) |
- 名前:管理人 日時:2020/06/01 23:20
すみません、ご質問はひとつづつでお願いします
最初のご質問と No.1 のご質問とどちらを優先しますか?
|
Re: gif動画をスムーズに再生するために背景で、バッググランドで再生したい! ( No.3 ) |
- 名前:マーク42 日時:2020/06/02 02:55
質問に質問を重ねてしまい申し訳ありませんでした。
質問させていただけるならば、まずは2つ目の質問を優先したいです。
どうかよろしくお願いいたします。
|
Re: gif動画をスムーズに再生するために背景で、バッググランドで再生したい! ( No.4 ) |
- 名前:でぃあぶろ 日時:2020/06/02 10:56
>本来数フレーム経ってから言葉がうっすらとスライドしながらでるように作ったのですが、
>なぜか既に言葉が表示されてしまいかつ、gif動画の処理だけが重くgif動画のように再生されませんでした。
プログラムの作り方によってはいくらでも無駄を作れるので,コードもなしに「正しく動くはずなのに!」
と言われてもこちらからはアドバイスのしようがありません.
またgifアニメーション程度でPCスぺック云々はあまり関係なさそうですが,
//dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4922
にてPさんからスペックはどのようなものですか?という質問が来ているのでこの際ですから返信してみてはどうでしょうか.
>TellMovieToGraphという関数により動画が描画され終わるまでどれくらいかかるかを計測していると思うのですが、
違います.リファレンスページには「ムービーグラフィックの動画の再生位置を得る」と書かれています.
以前から色んなところで言われているようですが,プログラムは思ったようには動きません.書いた通りに動きます.
手を動かして動作を確認していればこのような質問にはならないと思います.そのためにそろそろデバッグできるようになりませんか?
printfデバッグもしないよりはマシですが,VisualStudioの機能を使ってデバッグしてみませんか?
やり方がわからない,同じようなことをしている人が居ない,気持ちはわかりますがデバッグはプログラマとして必須のスキルです.
できないやれないわからない,と諦める前に今一度デバッグの仕方を勉強してみませんか?絶対マーク42さんの為になるはずです.
デバッグできるようになればもうサンプルコードに頼らなくても良くなると思います.リファレンスを読んで,
わからなければデバッグしながら動作を確認できるんですよ.こういう動きをするのか,って確認できるんですよ.
デバッグしてもわからないことは当然ある(本当にバグだったり,未定義動作だったりする場合もあると思います)ので
その時はどうぞ質問してください.手を動かした分情報も多いので,回答も付きやすいと思います.
>TellMovieToGraphの関数をどのように使えば、どのように書けばちゃんと最初から動画が実行されるのでしょうか?
TellMovieToGraph()は動画の再生位置を取得する関数です.動画の再生位置がミリ秒単位で取得できます。
YouTubeでも何でもいいですけど,動画のシークバーみたいなものです.今何分何秒の再生位置です.って教えてくれる関数です.
なので例えば1分45秒になったら字幕を流す,とか効果音を再生する,とかそういう風に使うんだと思います.
正しく動画が再生されていない(と思われる)時に解決策を与えてくれるような関数ではないと思います.
あと利用方法と言うか,態度と言うか,マーク42さんの質問に対する姿勢が気になってしまいます.
質問すると言うことは,それを解決したいわけなんですよね?マーク42さんの質問は解決もされず,
回答者のレスで終わってしまっている質問が多くありませんか?回答しているものとしては非常に残念です.
私が以前回答した//dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4856については解決したのでしょうか?
また//dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4836についてはsereparuさんが非常に気にかけているようです.
後々の人が似たような文言で検索したときに有意義なものになるよう,解決しているのであればどのように解決したのか,
どういったことが原因でうまくいかなかったのか,など何か知見を残していきませんか?
何と言うか,誰も幸せになっていないような気がしてなりません.
何だか長文になってしまい申し訳ありません.色々私情が入っているので「知らねえよ」って感じなら無視していただいて結構です.
|
Re: gif動画をスムーズに再生するために背景で、バッググランドで再生したい! ( No.5 ) |
- 名前:このライブラリ知らない人 日時:2020/06/02 14:38
No.1 に示されているコード(サンプルか何かかな?)のファイル名 "??.mpg" の部分を
件のgifに置き換えたものを実行さいた場合でも
> 本来数フレーム経ってから言葉がうっすらとスライドしながらでるように作ったのですが、
> なぜか既に言葉が表示されてしまいかつ...
という状況が変わらず発生するのか否かを一度見てみると良いのではないでしょうか.
|
Re: gif動画をスムーズに再生するために背景で、バッググランドで再生したい! ( No.6 ) |
- 名前:マーク42 日時:2020/06/02 17:43
どうもありがとうございます。でぃあぼろさん。
>>後々の人が似たような文言で検索したときに有意義なものになるよう,解決しているのであればどのように解決したのか,
どういったことが原因でうまくいかなかったのか,など何か知見を残していきませんか?
何と言うか,誰も幸せになっていないような気がしてなりません.
いいえ、解答してくださるプログラマの方やこれからプログラムを作る人も私ほど出来の悪い人間ではないので、誰かの幸せになることは少ないと思います。
ですが、解答してくださった方への対応として解決したことと解決方法をお伝えすることは礼儀として当然でした。
無礼を働きすいませんでした。またこんな出来の悪い私に親切に対応してくださり感謝します。
//dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4856
//dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4836
において今更で恐縮ですが解決方の回答をさせていただきました。
|