配列に格納した動画ファイル

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

配列に格納した動画ファイル

#1

投稿記事 by ポッキー » 13年前

独学でプログラミングをしている者です。
現在、多次元配列に動画を格納したものをランダマイズし、それらを再生していくプログラムを書いています。
以前「2次元配列のランダマイズについて」で質問させていただき、その回答を元にランダマイズは行っています。
動画の配列格納およびランダマイズはうまくいくのですが、再生に問題が生じて困っています。
コンパイルエラーは出ないのですが、各動画の冒頭が順に再生され、その時CPU使用率が100%になってしまいます。
ランダマイズ後、最初の動画が終わったら次の動画が再生されるというプログラムにするにはどうしたらよいか。また、CPUの問題はなぜ生じるのか。詳しい方おりましたら、ご教示くださると助かります。
当方、C/C++の基礎知識はあります。


環境は
OS: windows 7 home premium
ライブラリ: DXライブラリ
コンパイラ: VC++ 2008
です。

以下、コードです。

コード:


#include "vector"
#include "algorithm"
#include "cstdlib"
#include "ctime"
#include "iostream"
#include "DxLib.h"
#include "string"

using namespace std;



int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);

int sti[4][6];
	sti[0][0] = LoadGraph("t1.avi");
	sti[0][1] = LoadGraph("t2.avi");
	sti[0][2] = LoadGraph("t3.avi");
	sti[0][3] = LoadGraph("t4.avi");
	sti[0][4] = LoadGraph("t5.avi");
	sti[0][5] = LoadGraph("t6.avi");
	sti[1][0] = LoadGraph("t7.avi");
	sti[1][1] = LoadGraph("t8.avi");
	sti[1][2] = LoadGraph("t9.avi");
	sti[1][3] = LoadGraph("t10.avi");
	sti[1][4] = LoadGraph("t11.avi");
	sti[1][5] = LoadGraph("t12.avi");
	sti[2][0] = LoadGraph("t13.avi");
	sti[2][1] = LoadGraph("t14.avi");
	sti[2][2] = LoadGraph("t15.avi");
	sti[2][3] = LoadGraph("t16.avi");
	sti[2][4] = LoadGraph("t17.avi");
	sti[2][5] = LoadGraph("t18.avi");
	sti[3][0] = LoadGraph("t19.avi");
	sti[3][1] = LoadGraph("t20.avi");
	sti[3][2] = LoadGraph("t21.avi");
	sti[3][3] = LoadGraph("t22.avi");
	sti[3][4] = LoadGraph("t23.avi");
	sti[3][5] = LoadGraph("t24.avi");
	


 while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && CheckHitKey(KEY_INPUT_ESCAPE)==0 ){

	

    srand((unsigned)time(NULL));
    int seed = rand();

    for(int i = 0; i < 4; i++){
        srand(seed);
        random_shuffle(sti[i], &sti[i][6]);
    }

    vector<int> result;
    for(int i = 0; i < 4; i++){
        result.insert(result.begin(), sti[i], &sti[i][3]);
    }

    random_shuffle(result.begin(), result.end());
	

		for (vector<int>::iterator it = result.begin(); it != result.end(); it++) {
			PlayMovieToGraph(*it);
			DrawExtendGraph(0,0,640,480,*it,FALSE);

		}
	

	}


	DxLib_End() ;				

	return 0 ;				


}



アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 配列に格納した動画ファイル

#2

投稿記事 by softya(ソフト屋) » 13年前

毎フレームランダマイズしているのは、まずいでしょうね。
それと全部の動画を一度に毎フレーム頭から再生しています。
これら、ランダマイズとは別の問題です。

1.まず動画を順番に再生する物を構築する。
2.ランダマイズ機能を搭載する。

の順番を踏まないと難しいです。
まず2つの動画を順番に再生するという最低限のものを作ってみて下さい。

【補足】
インデントが不正確なので綺麗に揃えて下さい。
読みづらい上にバグの原因となります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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