关于使用EasyX逐像素打印过慢的问题

0

我是 EasyX 的初学者,正使用EasyX做一个简单的游戏。但是我遇到了一个问题

我把游戏做成全屏的效果,它会十分迅速的计算出每个像素的颜色,并且储存在二维数组当中。可是如果使用 putpixel(x,y,color) 函数逐个绘制每个像素,大概需要2~4秒的时间。即使画面每次仅改变一部分像素,相对于144Hz屏幕来说,这个时间也是非常慢的。下面的代码是一个测试。

有什么方法,可以迅速把这个二维数组存储的数据,打印到屏幕吗?

#include <graphics.h>
#include <conio.h>
int main(){
	//获取屏幕尺寸
	int window_width = GetSystemMetrics(SM_CXSCREEN);
	int window_height = GetSystemMetrics(SM_CYSCREEN);
	
	//创建等同屏幕大小的窗口
	initgraph(window_width, window_height, EW_SHOWCONSOLE);
	
	//获取窗口句柄,并全屏
	HWND hwnd = GetHWnd();
	SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) - WS_CAPTION);
	SetWindowPos(hwnd, HWND_TOP, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CXSCREEN), SWP_SHOWWINDOW);
	
	//进行第一次全屏逐像素打印,颜色:蓝色
	for(int i=0;i<window_width;i++){
		for(int j=0;j<window_height;j++){
			putpixel(i,j,BLUE);
		}
	}
	
	//按下任意键,进行第二次逐像素打印
	_getch();
	for(int i=0;i<window_width;i++){
		for(int j=0;j<window_height;j++){
			putpixel(i,j,RED);
		}
	}

	// 按任意键退出
	_getch();
	closegraph();
	return 0;
}
ava
奶头乐

2021-10-9

1

putpixel 需要计算许多东西,比如,屏幕缩放比例、坐标偏移、裁剪区等等,所以肯定会慢。

如果需要加速访问,可以直接操作显示缓冲区,参考这里:https://codebus.cn/yangw/high-speed-drawing-with-direct-operation-of-display-buffers

ava
慢羊羊

2021-10-9

很完美。十分感谢❀ -  奶头乐  2021-10-9
技术讨论社区