Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何避免在Allegro 5中重画静态背景?_C++_Allegro_Allegro5 - Fatal编程技术网

C++ 如何避免在Allegro 5中重画静态背景?

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

当我初始化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_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重画静态背景?

我不认为有一种简单的方法可以做到这一点,而且在任何情况下,只需在单元格前、每一帧重画背景就更简单了

若你们的背景并没有太大变化,或者根本并没有变化,你们可以把它存储在一个纹理中,然后画出来。这就是所谓的,一开始做起来和推理都很简单

如果你真的不想重画背景,你可以做的是当你改变一个隐藏背景的单元格的值时,你应该存储这段背景,当这个单元格“死亡”时,再画回来。我不知道,以前的游戏很多,现在可能仍然很多

如果你的大部分画面都在变化,那么重绘一切似乎是最简单的事情。(我的直觉是这将是最有效的,但我可能错了)