ページ 11

輝針城のような反転演出

Posted: 2016年6月05日(日) 18:48
by とんとん
東方輝針城で鬼人正邪の使う一部の攻撃にある左右反転などの演出を作りたいと思っているのですが、

一回普通に描画したものをSaveDrawScreenToPNGで保存して、
その画像をDrawRotaGraph3を使って拡大率を変化させた上で描画、
という方法を考えているのですが、もう少し簡単に描画できないのでしょうか。
SaveDrawScreenToPNGは処理に時間がかかるのでできれば使わずに済ましたいです。

Re: 輝針城のような反転演出

Posted: 2016年6月05日(日) 21:18
by Hiragi(GKUTH)
DxLibの関数であるMakeGraph,GetDrawScreenGraphなどを用いて実現できると思います。
イメージ的にはVRAM上に現在の画面をキャプチャしておいておき、一つの画像のように扱えます。
ディスクへのアクセスが無いため比較的負荷も少なく実装できるかと思います。

使用している関数の詳細についてはDxLibのリファレンスページを参照してください。

コード:

#include "DxLib.h"

#define WIDTH 640
#define HEIGHT 480

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	ChangeWindowMode(true);
	if (DxLib_Init() != 0) return -1;
	SetDrawScreen(DX_SCREEN_BACK);	//描画先を裏画面に設定

	int cnt = 0;
	int gr_sub;		//サブ描画先

		//新しいグラフィックの作成
	gr_sub = MakeGraph(WIDTH,HEIGHT);

		//四角形をランダムに120フレーム間、DX_SCREEN_BACKに描画する
	for(int i = 0; i < 120;i++)
		DrawBox(GetRand(WIDTH), GetRand(HEIGHT), GetRand(WIDTH), GetRand(HEIGHT), GetColor(GetRand(255), GetRand(255), GetRand(255)),false);

		//表画面に反映
	ScreenFlip();

		//1秒待機
	Sleep(1000);

		//現在のDX_SCREEN_BACKをgr_subにコピーする
	GetDrawScreenGraph(0,0,WIDTH,HEIGHT,gr_sub);

		//DX_SCREEN_BACKをクリア
	ClearDrawScreen();

		//gr_subを半分に縮小して描画する
	DrawExtendGraph(0,0,WIDTH/2,HEIGHT/2,gr_sub,true);

		//表画面に反映
	ScreenFlip();

		//キー入力を待つ。
	WaitKey();
	


	DxLib_End();
	return 0;
}

Re: 輝針城のような反転演出

Posted: 2016年6月06日(月) 20:19
by とんとん
Hiragi(GKUTH)さん、ありがとうございます。軽い処理で再現することが出来ました。ありがとうございました。