C++ 如何避免在Allegro 5中重画静态背景?
当我初始化Allegro时,我画了一个2D表格,它的单元格在程序中会变成白色/黑色C++ 如何避免在Allegro 5中重画静态背景?,c++,allegro,allegro5,C++,Allegro,Allegro5,当我初始化Allegro时,我画了一个2D表格,它的单元格在程序中会变成白色/黑色 //Global variables int** board; //Draw 2D board for (int i = 0; i < SCREEN_H ; i++) { for (int j = 0; j < SCREEN_W; j++) { al_draw_rectangle((j) * CELL_SIZE, (i) * CELL_SIZE, (j + 1) * CELL
//Global variables
int** board;
//Draw 2D board
for (int i = 0; i < SCREEN_H ; i++) {
for (int j = 0; j < SCREEN_W; j++) {
al_draw_rectangle((j) * CELL_SIZE, (i) * CELL_SIZE, (j + 1) * CELL_SIZE, (i + 1) * CELL_SIZE, BLACK, 1.0);
}
}
al_flip_display();
//全局变量
int**板;
//绘制二维板
对于(int i=0;i
在while循环之前,它初始化二维动态指针板,随机值介于0和1之间
在循环内,我改变单元格的颜色
//changes the values of board based on the rules of the Conway's Game of Life
generate();
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < columns; ++j) {
//Redrawing the table
al_draw_rectangle((j) * CELL_SIZE, (i) * CELL_SIZE, (j + 1) * CELL_SIZE, (i + 1) * CELL_SIZE, BLACK, 1.0);
if(board[i][j] == 1){
al_draw_filled_rectangle((j) * CELL_SIZE, (i) * CELL_SIZE, (j + 1) * CELL_SIZE, (i + 1) * CELL_SIZE, BLACK);
}else{
al_draw_filled_rectangle((j) * CELL_SIZE, (i) * CELL_SIZE, (j + 1) * CELL_SIZE, (i + 1) * CELL_SIZE, WHITE);
}
}
}
//根据康威的生活游戏规则更改棋盘的值
生成();
对于(int i=0;i
但在for循环中,我需要再次重新绘制表
当我在绘制单个单元格时,如何避免Allegro重画静态背景?我不认为有一种简单的方法可以做到这一点,而且在任何情况下,只需在单元格前、每一帧重画背景就更简单了 若你们的背景并没有太大变化,或者根本并没有变化,你们可以把它存储在一个纹理中,然后画出来。这就是所谓的,一开始做起来和推理都很简单 如果你真的不想重画背景,你可以做的是当你改变一个隐藏背景的单元格的值时,你应该存储这段背景,当这个单元格“死亡”时,再画回来。我不知道,以前的游戏很多,现在可能仍然很多 如果你的大部分画面都在变化,那么重绘一切似乎是最简单的事情。(我的直觉是这将是最有效的,但我可能错了)