gpt4 book ai didi

c - 由于带有图像表面阵列的 SDL_Flip,SDL 窗口关闭

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:57 24 4
gpt4 key购买 nike

我正处于打砖 block 游戏的开始阶段,我卡在了 SDL_Flip 这一步。我的 CodeBlocks 编译器什么也没说,控制台也没有崩溃,但是 SDL 窗口关闭并且控制台进程返回代码 3。当我运行调试器时,它说:

SDL_Flip()
Display(Bricks=0x28f69c, screen=0x0)

显示类型错误位于我的 SDL_Flip(screen);

这是我的代码的一瞥。我的 Brick_CoordinatesBrick_Surface 结构已经被另一个函数初始化(我的 Brick_Coordinates 坐标和 Brick_Surface 的坐标为 NULL)之前那个:

void Display(BrickStruct Bricks[12][10],SDL_Surface *screen)
{
int i=0,j=0;

for(j=0;j<10;j++)
{
if( (j+1)%2==0 ) // If we are on even lines, display only 11 bricks
{
for(i=0;i<11;i++)
{

Bricks[i][j].Brick_Surface = IMG_Load("BrickTest1.png");
SDL_BlitSurface(Bricks[i][j].Brick_Surface, NULL, screen, &Bricks[i][j].Brick_Coordinates);
SDL_Flip(screen);

}
}
else // If we are on odd lines, display the 12 bricks
{
for(i=0;i<12;i++)
{

}
}
}
}

我的结构如下所示:

typedef struct BrickStruct
{
int type;
SDL_Rect Brick_Coordinates;
SDL_Surface *Brick_Surface;
}BrickStruct;

在我的主要代码中,我的代码是这样的:

SDL_Surface *screen= NULL; 

BrickStruct Bricks[12][10]; // I create my 2D array of struct named Bricks

Display(Bricks,screen);

我已经用 fprintf 测试了我坐标的初始化值。这些都很好。显然我的 SDL_Blit 正在运行。但翻转不是。我的屏幕表面足够大,可以容纳我所有的图像(480x540,我的图像是 40x20)。我想知道这个问题是否与 Blit 无法将图像放在另一个图像之上有关,但是当我只尝试使用一个图像时 Flip 甚至不起作用图像(没有我的循环)。有人可以告诉我我的问题在哪里吗?提前致谢

最佳答案

原因是你没有把screen保存到全局变量中。

您的 SDL_Initialisation 中可能有一行与此类似:

SDL_Surface *screen = SDL_SetVideoMode(640, 480, 8, SDL_SWSURFACE);

这会创建一个名为 screen 的新局部变量。既然你想把它保存到全局的,你应该把它改成:

screen = SDL_SetVideoMode(640, 480, 8, SDL_SWSURFACE);

关于c - 由于带有图像表面阵列的 SDL_Flip,SDL 窗口关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22270276/

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