- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
第一个问题,我真的需要帮助。所以我一直在努力学习
C++ 上的 SDL2 api。我正在使用 raspberry pi 3 model B。我首先关注 Youtube 上的教程(更具体地说是 CodingMadeEasy)但现在我正在关注 lazyfoo 的教程。我复制了 CME 的代码并尝试显示图像 (.bmp) 但窗口什么也没显示,也 SDL_GetError() 没有报告任何错误。我以为一定有
我写的代码有问题或者我从互联网上下载的图像可能不是 .bmp 所以我去了 lazyfoo 的教程这里 http://lazyfoo.net/tutorials/SDL/02_getting_an_image_on_the_screen/index.php并下载了源代码和.bmp 文件。但是当我运行它时,我得到了相同的输出:一个空白窗口和 SDL_GetError() 未在控制台上报告任何内容。这是代码:
/*This source code copyrighted by Lazy Foo' Productions
(2004-2015)
and may not be redistributed without written permission.*/
//Using SDL and standard IO
#include <SDL2/SDL.h>
#include <stdio.h>
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
//Starts up SDL and creates window
bool init();
//Loads media
bool loadMedia();
//Frees media and shuts down SDL
void close();
//The window we'll be rendering to
SDL_Window* gWindow = NULL;
//The surface contained by the window
SDL_Surface* gScreenSurface = NULL;
//The image we will load and show on the screen
SDL_Surface* gHelloWorld = NULL;
bool init()
{
//Initialization flag
bool success = true;
//Initialize SDL
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
success = false;
}
else
{
//Create window
gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
if( gWindow == NULL )
{
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
success = false;
}
else
{
//Get window surface
gScreenSurface = SDL_GetWindowSurface( gWindow );
}
}
return success;
}
bool loadMedia()
{
//Loading success flag
bool success = true;
//Load splash image
gHelloWorld = SDL_LoadBMP( "02_getting_an_image_on_the_screen/hello_world.bmp" );
if( gHelloWorld == NULL )
{
printf( "Unable to load image %s! SDL Error: %s\n", "02_getting_an_image_on_the_screen/hello_world.bmp", SDL_GetError() );
success = false;
}
return success;
}
void close()
{
//Deallocate surface
SDL_FreeSurface( gHelloWorld );
gHelloWorld = NULL;
//Destroy window
SDL_DestroyWindow( gWindow );
gWindow = NULL;
//Quit SDL subsystems
SDL_Quit();
}
int main( int argc, char* args[] )
{
//Start up SDL and create window
if( !init() )
{
printf( "Failed to initialize!\n" );
}
else
{
//Load media
if( !loadMedia() )
{
printf( "Failed to load media!\n" );
}
else
{
//Apply the image
SDL_BlitSurface( gHelloWorld, NULL, gScreenSurface, NULL );
//Update the surface
SDL_UpdateWindowSurface( gWindow );
//Wait two seconds
SDL_Delay( 2000 );
}
}
//Free resources and close SDL
close();
return 0;
}
如果您需要 .bmp 文件,请访问上面的链接并下载源代码和文件。它不让我上传它。这是我得到的输出:Output .这种透明的, 灰色的窗口。我正在使用 gnu c++ 编译器并使用
g++ 02_getting_an_image_on_the_screen.cpp -w -lSDL2 -o hl
并获得透明的灰色窗口。我猜它是透明的,因为我的终端是这样配置的。为查看问题出在哪里,我删除了 .bmp 文件以查看 sdl 是否报告了错误,它确实报告了错误,这意味着当 .bmp 文件位于正确的位置时它能够读取它,只是无法显示它。我在谷歌上搜索了几个小时,一无所获。在堆栈溢出时,最接近我的问题是这个 SDL window does not show我什至尝试轮询事件,以便让系统有机会运行它的事件循环,正如那里所建议的那样,但无论窗口保持打开状态多长时间,.bmp 都不会显示。更奇怪的是,这不是第一次发生在我身上。一年前我尝试学习 SDL2,但同样的事情发生在那个时候。我使用的是带有 2GB RAM 的廉价 Windows 10 笔记本电脑,并且使用的是 code::blocks(mingw 编译器版本),同样的事情发生了,除了窗口不是透明的,它是白色的,就像你创建窗口时得到的一样与 sdl在 Windows 中不显示任何内容。出于某种原因,codeblocks 不允许我将窗口设置为 nullptr
,说它无法识别它是什么,所以我不得不将其设置为 NULL
。因此,我认为窗口不显示 .bmp 也是编译器的错。所以我下载了Microsoft visual studio 2015但结果是一样的:没有图像显示。 那时,我放弃了,但现在我又回来了,因为我有一台新机器(rpi model 3 b)和一个新的编译器(gnu c/c++),我认为 SDL 不会再困扰我,但 SDL 不会似乎要放弃了。我真的需要帮助。是的,.bmp 位于正确的位置,并且我在代码中包含了它的正确名称。请记住,我已经尝试在 2 台机器、3 个编译器、2 个非常不同的操作系统和 2 个不同的 cpu 架构(armv71 和 x86)上执行此操作,此时它变得令人沮丧。我有一些惊人的想法,如果 SDL2 让我可以很容易地实现这些想法。很抱歉发了这么长的帖子,我们将不胜感激。谢谢。
最佳答案
您的代码在我的 iMac 上运行良好。我所做的唯一更改如下,因此您可以尝试进行相同的更改,看看它是否适合您。
首先,有许多不同类型的 BMP 文件,您可能已经掌握了一种在您的图片查看器应用程序中运行良好的文件,但 SDL “不高兴”加载它。毫无疑问,使用 ImageMagick 创建您自己的 BMP 文件,然后您可以确定您拥有一个好的文件。我在终端中使用了这个:
convert -size 640x480 gradient:red-cyan image.bmp
其次,在任何 “集成开发环境” 之外运行您的程序,即仅从终端和当前目录中的所有图像(无路径)并且名称中没有空格。原因是 IDE 会破坏事件循环和屏幕更新,并且 IDE 通常看起来正在运行一个程序但实际上正在运行 /some/where/else/Debug/program
而这会造成困惑向上打开文件的路径,例如你的 "02_getting_an_image_on_the_screen/hello_world.bmp"
这也意味着目录分隔符不会导致问题。
第三,考虑使用pkgconfig
获取 header 路径和库。例如,在我的 Mac 上,它添加了一个我可能没有意识到的线程安全定义:
pkg-config --cflags --libs sdl2
示例输出
-D_THREAD_SAFE -I/usr/local/include/SDL2 -L/usr/local/lib -lSDL2
所以,为了编译,我使用:
g++ main.cpp $(pkg-config --cflags --libs sdl2) -o main
关于c++ - 在 C++ 中的 SDL2 窗口中显示 .bmp 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52341612/
问题解决了 转到底部查看解决方案。 大家好,我用谷歌搜索了很长时间,但没有找到任何东西,所以,我们开始吧: 我有这样的设置: Compiler: MinGW IDE: Netbeans Library
如何在 SDL 中创建一个插入主窗口的新窗口?所以它可以是有重点的,有单独的绘图上下文和单独的处理事件。 最佳答案 窗中窗 您可以使用下面的示例在窗口中创建一个窗口。该示例将生成两个窗口,其中 sub
我是 SDL 的新手,我只是好奇为什么 sdl 使用静态和动态库?我的意思是,sdl.dll 中有哪些函数,为什么它是动态链接而不是静态链接?谢谢。 最佳答案 SDL.dll包含您在 SDL 中使用的
我通过 brew 在我的 mac 上安装了 SDL,但我无法包含它!这是我太简单的代码: #include int main(){ return 0; } 用cc编译时,CC找不到SDL.h
我正在尝试制作一个以恒定帧速率运行的 SDL 程序。但是我发现即使我的程序滞后很多并且跳过了很多帧(即使它以低帧运行并且没有渲染太多)。 你们有什么建议可以让我的程序运行更流畅吗? #include
我目前正在编写一款非常复杂和狡猾的游戏,它会让您充满敬畏和胜利 - 哦,好吧,这是 15 个谜题,我只是在熟悉 SDL。 我在窗口模式下运行,并使用 SDL_Flip 作为一般情况的页面更新,因为它会
我知道 SDL_TEXTUREACCESS_STATIC 和 SDL_TEXTUREACCESS_TARGET 之间的区别。我正在为一款游戏编写 SDL 后端,该游戏的平台无关核心不会告诉平台相关纹理
我们最近移植了 Bitfighter从 GLUT 到 SDL。这样做有很多好处,但也有一些缺点,特别是在窗口管理领域。 Bitfighter 在固定纵横比窗口(800x600 像素)中运行。用户可以将
我正在尝试使用 SDL 2.0 了解整个 2D 加速渲染过程。 所以我的问题是在屏幕上绘制圆圈最有效的方法是什么,为什么? 一些方法是: 首先创建一个软件表面,然后在该表面上绘制必要的像素,然后从该表
我正在尝试将纹理保存到 png 中,而我唯一得到的是 是屏幕的一部分的屏幕截图。 我的代码示例: src_texture = SDL_CreateTextureFromSurface( render
我正在使用 SDL1.2 在我的 openGL 框架中处理窗口管理。 程序运行时是否可以在不调用 SDL_Quit() 的情况下破坏窗口(表面)? ? 背景:我的框架实际上只是多媒体环境中的一个 gf
如何在 SDL 中缩放 Sprite ? 最佳答案 SDL 不直接提供缩放功能,但有 an additional library called SDL_gfx它提供旋转和缩放功能。还有another
我刚刚开始使用SDL2_ttf。我已经弄清楚如何使用 TTF_RenderText_Blished 在屏幕上获取一些文本,但是如何让它进行换行和自动换行? 似乎不支持\n;它只是创造一个空间而不是沿着
我安装了 FEDORA 和 SDL,并希望在编译时用 C 编程图形,我得到了很多对 SDL_MapRGB、SDL_Init 等的 undefined reference 我搜索了文件系统 SDL.dl
我在我的项目中使用 SDL 库,并且在 Windows 平台上工作。 当我决定将项目迁移到 SDL 2 时,我遇到了一个问题: SDL 1.2 中有一个选项可以将 stdout/stderr 的输出打
我正在尝试使用 Derelict 和 D 编写一个简单的图形测试程序。 当我尝试用 SDL 做几乎任何事情时,它都会出现段错误。这是有问题的代码: import std.stdio; import
我在考虑是否尝试使用 SDL 作为 DirectX 的替代品,似乎我只创建 2D 游戏,但是我找不到任何地方是否需要在最终用户计算机上安装 SDL 才能玩用 C# 开发的游戏,图形使用 SDL。 有人
我想使用 SDL_net 作为一个供少数程序使用的帮助程序库。然而,其中一些程序本身可能已经在使用 SDL。如果我理解正确的话,这意味着我在初始化/释放我的库时不能盲目使用 SDL_Init 和 SD
我希望我的游戏引擎停止将鼠标移动到中心(用于偏航和俯仰相机计算)。我写了一些应该处理它的代码,但鼠标在最小化时仍然移动。 void mainLoop() { // This is the ma
结构SDL_Keysym 有SDL_Scancode 和SDL_Keycode 成员。它们之间有什么区别?该文档并没有真正为我清除它。我都试过了,它们似乎做同样的事情。 最佳答案 参见 the SDL
我是一名优秀的程序员,十分优秀!