SDL2 纹理操作教程无法执行 - 懒惰的 Foo http://lazyfoo.net/tutorials/SDL/40_texture_manipulation/index.php

SDL2 Texture Manipulation Tutorial Can't Execute - Lazy Foo http://lazyfoo.net/tutorials/SDL/40_texture_manipulation/index.php

本文关键字:tutorials net lazyfoo php SDL manipulation texture index http 教程 操作      更新时间:2023-10-16

我一直在玩SDL2纹理操纵教程问题-懒虫SDL2懒虫纹理操纵教程

但它甚至不运行。显然,分割错误的原因与用于创建纹理的表面格式有关。

崩溃点1:

SDL_Surface* formattedSurface = SDL_ConvertSurface( loadedSurface, SDL_GetWindowSurface( gWindow )->format, NULL );

崩溃点2:

//Map colors
Uint32 colorKey = SDL_MapRGB( SDL_GetWindowSurface( gWindow )->format, 0, 0xFF, 0xFF );
Uint32 transparent = SDL_MapRGBA( SDL_GetWindowSurface( gWindow )->format, 0xFF, 0xFF, 0xFF, 0x00 );

有人能帮忙吗?

问候

永远找不到它!

碰撞点1需要更换为

formattedSurface = SDL_ConvertSurfaceFormat( loadedSurface, SDL_PIXELFORMAT_RGBA8888, NULL );

碰撞点2需要更换为:

Uint32 colorKey = SDL_MapRGB( formattedSurface->format, 0, 0xFF, 0xFF );
Uint32 transparent = SDL_MapRGBA( formattedSurface->format, 0XFF, 0XFF, 0XFF, 0xFF );

干杯

我假设你说的是第119行?

//Convert surface to display format
SDL_Surface* formattedSurface = SDL_ConvertSurface( loadedSurface, SDL_GetWindowSurface( gWindow )->format, NULL );

您不需要像第一个解决方法中那样手动指定像素格式,但公平地说,Lazy没有正确调用SDL_ConvertSurface,我想知道这是否会给您带来问题。

SDLWiki中显示的正确语法是:

SDL_Surface* SDL_ConvertSurface(SDL_Surface*           src,
                                const SDL_PixelFormat* fmt,
                                Uint32                 flags)

还要注意,第三个参数,即标志"[…]未使用,应设置为0;这是SDL1.2的API的剩余部分"。

通过使用-Weffc++编译器标志,我收到了关于这一点和其他一些重复错误的警告,然后查看了wiki以查看标志的选项。用它来预防(不知情的(坏习惯并不是一个坏主意。

您可能应该确保您使用的是一个相对较新的工具链版本,并使用c++11的编译器标志。我发现这些步骤对于至少一个早期的LazyFooSDL2教程来说是必要的,关于新的字符串函数。

试着运行一个调试器,看看到底是什么原因导致了崩溃。从一开始就观察gWindow并逐步了解它应该很有见地。FWIW,我对这个没有任何问题。如果缺少DLL或可执行文件所需的其他文件,也可能会出现奇怪的崩溃。

我很想知道你的操作系统规格、工具链和版本、SDL2和libs版本,还想看看任何构建错误/警告和控制台输出。