輝針城のような反転演出

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
とんとん
記事: 33
登録日時: 3年前
連絡を取る:

輝針城のような反転演出

#1

投稿記事 by とんとん » 3年前

東方輝針城で鬼人正邪の使う一部の攻撃にある左右反転などの演出を作りたいと思っているのですが、

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

アバター
Hiragi(GKUTH)
記事: 167
登録日時: 9年前
住所: 大阪府
連絡を取る:

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

#2

投稿記事 by Hiragi(GKUTH) » 3年前

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;
}
だいがくせい!

とんとん
記事: 33
登録日時: 3年前
連絡を取る:

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

#3

投稿記事 by とんとん » 3年前

Hiragi(GKUTH)さん、ありがとうございます。軽い処理で再現することが出来ました。ありがとうございました。

閉鎖

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