#include <DxLib.h>
void GetColorPixel(int,int,int,int);
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
DxLib::ChangeWindowMode(true);
DxLib::DxLib_Init();
int x = 0; int y = 0;
GetColorPixel(DxLib::LoadGraph("products_rpgvx_lecture_sample01.jpg"),x,y,4);
DxLib::WaitKey();
DxLib::DxLib_End();
}
void GetColorPixel(int graph, int x, int y, int n){
DxLib::ClearDrawScreen();
int sizex, sizey;
DxLib::GetGraphSize(graph,&sizex,&sizey);
DxLib::DrawGraph(0,0,graph,true);
int **color = new int*[sizex];
for(int i=0; i<sizex; i++)
color[i] = new int[sizey];
for(int i=0; i<sizex; i++)
for(int j=0; j<sizey; j++)
color[i][j] = DxLib::GetPixel( i , j );
DxLib::ClearDrawScreen();
for(int i=0; i<sizex; i++)
for(int j=0; j<sizey; j++)
DxLib::DrawBox(i*n+x,j*n+y,i*n+n+x,j*n+n+y,color[int(i)][int(j)],true);
for(int i=0; i<sizex; i++)
delete[] color[i];
delete[] color;
}
RPGのマップの表示の速度について
-
doss
RPGのマップの表示の速度について
Dxライブラリによる画像表示でRPGのマップのようなものの倍率を高め表示したいと思いいたったのですが、いかんせんこの書き方では処理がとても重いので、何とか軽量化できないでしょうか
Re: RPGのマップの表示の速度について
GetPixel関数について、
と書かれています。
ソフトウェアイメージなど、別の方法を検討するべきだと思います。
また、取得した色をDrawBoxで描画するだけなら、素直にDrawExtendGraph関数を使えばいいと思います。
(http://homepage2.nifty.com/natupaji/DxL ... .html#R2N6)DXライブラリ置き場 リファレンスページ さんが書きました:この関数はとても処理に時間がかかるので多用は禁物です。
と書かれています。
ソフトウェアイメージなど、別の方法を検討するべきだと思います。
また、取得した色をDrawBoxで描画するだけなら、素直にDrawExtendGraph関数を使えばいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
doss
Re: RPGのマップの表示の速度について
みけCATさん、本当にありがとうございました!これまでの悩みが嘘のように格段に速度が上がりました!
#include <DxLib.h>
void GetColorPixel(int,int,int,int);
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
DxLib::ChangeWindowMode(true);
DxLib::DxLib_Init();
int x = 0; int y = 0;
GetColorPixel(DxLib::LoadSoftImage("products_rpgvx_lecture_sample01.jpg"),x,y,4);
DxLib::WaitKey();
DxLib::DxLib_End();
}
void GetColorPixel(int graph, int x, int y, int n){
DxLib::ClearDrawScreen();
int sizex, sizey;
DxLib::GetSoftImageSize(graph,&sizex,&sizey);
int **color = new int*[sizex];
for(int i=0; i<sizex; i++)
color[i] = new int[sizey];
for(int i=0; i<sizex; i++)
for(int j=0; j<sizey; j++){
int *tmpcolor = new int[4];
DxLib::GetPixelSoftImage(graph , i , j , &tmpcolor[0] , &tmpcolor[1] , &tmpcolor[2] , &tmpcolor[3]);
color[i][j] = DxLib::GetColor( tmpcolor[0] , tmpcolor[1] , tmpcolor[2] );
delete[] tmpcolor;
}
DxLib::ClearDrawScreen();
for(int i=0; i<sizex; i++)
for(int j=0; j<sizey; j++)
DxLib::DrawBox(i*n+x,j*n+y,i*n+n+x,j*n+n+y,color[int(i)][int(j)],true);
for(int i=0; i<sizex; i++)
delete[] color[i];
delete[] color;
}
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: RPGのマップの表示の速度について
DrawExtendGraph関数をではダメなのですか?
GetPixelSoftImageも遅いですよ。
GetPixelSoftImageも遅いですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: RPGのマップの表示の速度について
ループ中で毎回tmpcolorを確保するのは無駄だと思います。
要素数が4で固定なら、普通に固定長の配列でいいのではないでしょうか?
要素数が4で固定なら、普通に固定長の配列でいいのではないでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)