gpt4 book ai didi

c++ - 如何在屏幕的一部分插入图像?

转载 作者:行者123 更新时间:2023-11-30 03:54:08 27 4
gpt4 key购买 nike

我的棋盘游戏使用矩阵。我使用矩形创建了一个板。 gimprimir() 获取矩阵并将其转换为不同类型的矩形。

我需要在屏幕的一部分插入图像。 This tutorial教授如何将图像放在屏幕上,而不是如何将其加载到屏幕的一部分。每当我尝试修改它时,都会出现段错误。我想保持简单。图片格式为.bmp。

我的代码:

bool loadMedia();                               
void close();
SDL_Texture* loadTexture( std::string path );
SDL_Window* gWindow = NULL;
SDL_Renderer* gRenderer = NULL;

const int SCREEN_WIDTH = 1200;
const int SCREEN_HEIGHT = 680;

int main(int argc, char* args[]){
nodo a;
if( !init() ){
cout << "Failed to initialize!\n" ;
}
else{
if(!loadMedia()){
cout << "Failed to load media!\n";
}
else{
bool quit = false; // flag ciclo principal
SDL_Event e; // variables manejo de eventos
SDL_Event t;
gimprimir(a);
}
}

}

函数 gimprimir() 使用 struct a 打印一 block 板:

struct nodo {
array<array<int,19>,19> tablero; // Estado tablero
array<int,2> p1,p2; // Posiciones
int d1,d2; // Distancias mínimas
int paredes1;
int paredes2;
} a;

gimprimir() 使用空矩形和填充矩形:

    void gimprimir(nodo aa){

//Clear screen
SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF );
SDL_RenderClear( gRenderer );
int i,j;
for (i=1; i<=17; i++){
if (i%2==1){
for (j=1; j<=17 ; j++){
if (j%2==1){
if (aa.p1[0]==i && aa.p1[1]==j){ // FICHA 1
SDL_Rect fillRect = {(50+SCREEN_WIDTH/11)+(SCREEN_WIDTH/11)*(j-1)/2+34, (SCREEN_HEIGHT/11)+(SCREEN_HEIGHT/11)*(i-1)/2+34, SCREEN_WIDTH/12, SCREEN_HEIGHT/12};
SDL_SetRenderDrawColor( gRenderer, 0xff, 0xcc, 0x66, 0xFF );
SDL_RenderFillRect( gRenderer, &fillRect );
}
else{
if (aa.p2[0]==i && aa.p2[1]==j){ // FICHA 2
SDL_Rect fillRect = {(50+SCREEN_WIDTH/11)+(SCREEN_WIDTH/11)*(j-1)/2+34, (SCREEN_HEIGHT/11)+(SCREEN_HEIGHT/11)*(i-1)/2+34, SCREEN_WIDTH/12, SCREEN_HEIGHT/12};
SDL_SetRenderDrawColor( gRenderer, 0x6E, 0x2C, 0x67, 0xFF );
SDL_RenderFillRect( gRenderer, &fillRect );
}
else{ // CASILLA VACÍA
SDL_Rect fillRect = {(50+SCREEN_WIDTH/11)+(SCREEN_WIDTH/11)*(j-1)/2+34, (SCREEN_HEIGHT/11)+(SCREEN_HEIGHT/11)*(i-1)/2+34, SCREEN_WIDTH/12, SCREEN_HEIGHT/12};
SDL_SetRenderDrawColor( gRenderer, 0x8B, 0x45, 0x13, 0xFF);
SDL_RenderFillRect( gRenderer, &fillRect );
}
}
}
}
}
}
SDL_RenderPresent( gRenderer );

}

loadMedia():

bool loadMedia()
{
//Loading success flag
bool success = true;

//Nothing to load
return success;
}

我想把两者都显示在屏幕上。加载要永远留在屏幕一部分的图像,然后更新用 gimprimir() 生成的矩形。

最佳答案

SDL_BlitSurface是用于 blit 的 SDL 函数(复制)从一个表面到另一个表面,需要两个SDL_Rect参数,srcrect 用于源,dstrect 用于目标。

SDL_BlitSurface 从 SDL1.2 到 SDL2 没有太大变化,因此,使用它的旧示例应该仍然有效。

getting_an_image_on_the_screen 示例中,您建议将 NULL 指针用于 src 和 dst rect,NULL rect 意味着复制整个 src在 top, left = 0, 0 表面进入目标,最大尺寸等于目标尺寸(如果源更大应该被裁剪)。

blit 局部图像只需指定 src 和 dst rect:

        SDL_Rect srcrect = { 0, 0, 100, 100 };
SDL_Rect dstrect = { 50, 50, 100, 100 };

//Apply the image
SDL_BlitSurface( gHelloWorld, &srcrect, gScreenSurface, &dstrect );

在这种情况下,源表面 (gHelloWorld) 的 top, left = 0, 0width, height = 100, 100 是 < em>blit 到目标表面 (gScreenSurface) 的 top, left = 50, 50

how to load it with other types of objects

抱歉,我不清楚你说的其他类型的对象是什么意思

关于c++ - 如何在屏幕的一部分插入图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29737203/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com