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
我一直在玩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版本,还想看看任何构建错误/警告和控制台输出。
相关文章:
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- 是否可以在Linux上使用.Net Core 3.1创建C++/CLI代码的C#DLL
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- C++ DLL(不是 CLI)是否可以调用 .NET Core 3.0 委托?
- System.AccessViolationException:shared_ptr C# .NET 和 C++ 应用程
- C++/CLI targetting .NET Core 3.1
- 是否有可能构建面向Linux和Windows的.Net Core C++ / CLI应用程序?
- WM_PAINT消息频率:C#(.Net Framework 4.7.2 WinForms)与C++
- 如何将 VB.Net 字符串作为字符*传递给C++dll?
- 从C++标头中导入常量而不是硬编码它们:扩展 .net 控件?
- VB.NET DLL中的C++DLL函数复制
- .NET核心应用程序无法加载C++DLL
- TEA在VB.NET中的实现
- 如何使用Winforms C#或C++.Net在不更改文件中其他内容的情况下修改jpg文件中的Orientation e
- 在.NET Core 3.1中运行托管C++/CLI程序集时,映像格式错误
- 如何使函数返回数组?用于制作在VB.NET中使用的DLL
- 生成.NET包装程序需要源代码吗
- SDL2 纹理操作教程无法执行 - 懒惰的 Foo http://lazyfoo.net/tutorials/SDL/40_texture_manipulation/index.php