Tag: sdl

获取SDL 2应用程序的窗口句柄

我想获得SDL2窗口的句柄,以便与WinApi一起使用。 我使用以下代码检索该句柄: /* All the SDL initalisation… */ SDL_Window* window = SDL_CreateWindow(“My Window”, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, RESX, RESY, SDL_WINDOW_SHOWN); SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); if (window == NULL || renderer == NULL) { MessageBox(NULL, L”SDL initialisation error”, NULL, MB_OK); exit(-1); } SDL_SysWMinfo wmInfo; SDL_GetWindowWMInfo(window, &wmInfo); HWND hwnd = wmInfo.info.win.window; 但此时, hwnd地址是0xcccccccc (未使用)。 我做错什么了吗?

在同一程序中组合SDL窗口和GTK +窗口

我正在创建和SDL程序,其中一些function打开GTK +窗口。 主窗口是SDL窗口,GTK +窗口主要是对话框。 main()函数正常打开SDL窗口,并且具有SDL事件的while循环,通常在SDL中。 一些SDL事件调用打开GTK +窗口的函数,如GTK +窗口通常是打开的,并且具有与main()在GTK +程序中相同的结构。 所有窗口都应该打开,问题在于关闭GTK +窗口。 当我关闭GTK +窗口时,它会一直打开,直到我关闭主SDL窗口。 当我关闭GTK +窗口时,唯一发生的事情是它在关闭后不再做任何事情,所以例如如果我最小化它然后再次最大化它,它就会变空。 当我关闭它时,SDL窗口也会响应事件,就像GTK +窗口不存在一样。 所以一切都像GTK +窗口关闭一样,只是它仍然可见。 我有一个g_signal_connect(G_OBJECT(window),”delete-event”,G_CALLBACK(gtk_main_quit),NULL); 打开GTK +窗口的每个函数中的行,这不是问题所在。 当我点击GTK +窗口中的关闭按钮时,如何关闭GTK +窗口但不关闭SDL窗口? 这是代码的结构(GTK窗口是这里的About对话框): #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef WINDOWS #include #endif void openGtkWindow(){ GtkWidget *aboutWindow = gtk_about_dialog_new(); //Write things in the […]

如何编译用C编写的SDL程序示例?

我正在开始使用SDL和C编程。 我有其他编程语言的经验,但在C中链接/编译库对我来说是新的。 我正在使用Mac 10.8并使用read me( ./configure; make; make install )中的说明安装了最新的稳定版2.0。 这是我尝试编译的示例代码: #include #include #include “SDL.h” int main(void) { if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER) != 0) { fprintf(stderr, “\nUnable to initialize SDL: %s\n”, SDL_GetError()); return 1; } atexit(SDL_Quit); return 0; } 当我尝试使用gcc example.c编译我的脚本时,我收到一个错误: example.c:3:17: error: SDL.h: No such file or directory example.c: In function ‘main’: example.c:7: error: ‘SDL_INIT_VIDEO’ undeclared […]

OS X El Capitan上的SDL_image视觉故障

当尝试使用C中的Allegro 5或Python中的PyGame(都使用SDL)加载和显示位图时,它会产生一个小故障(见下面的截图)。 我尝试使用谷歌搜索它,发现它可能与OS X El Capitan的SDL_image不兼容有关,但没有解决方案。 任何人? 目前,我尝试过: 安装SDL_image 1.2.10(最新兼容版本)。 不! 通过自定义公式使用Homebrew安装SDL_image 1.2.10。 也没什么! 在屏幕截图中,那些随机像素应该是三个红砖位图。 顺便说一句,我正在使用这些函数分别加载和绘制位图: tileset[0] = al_load_bitmap(“./data/gfx/bricks.png”); al_draw_bitmap(tileset[0], pos_x, pos_y, 0);

将png转换为sdl的c标头

我想说,我已经在互联网上搜索过这个话题,但它并不适用于我的情况。 我正在对使用C的游戏进行修改,我正在编辑用于游戏的图像,但是图像需要转换为c标头才能使它们正常工作。 该游戏是多平台的,通过NDK为Windows和Android构建。 我实际上完成了一些编辑,使用“ 在SDL中使用gimp导出的.c / .h图像 ”作为我的解决方案的基础,使用mbin2h,它将任何二进制文件转换为适合C头的内容。 它适用于Android版本,但不适用于主要的跨平台C版本。 这是一个示例代码: 这就是mbin2h通常输出的内容: 0x89, ‘P’, ‘N’, ‘G’, 0xD, 0xA, 0x1A, 0xA, 0x0, 0x0, 0x0, 0xD, ‘I’, ‘H’, ‘D’, ‘R’ 这是源于原始来源: “\x89″”PNG””\15\12\32\12\0\0\0\15″”IHDR” 我不知道他们用什么程序将PNG转换为头文件。 正如你们中的一些人指出的那样,它是hex,ASCII字符和八进制值的组合。 问题是如何将png转换为类似于原始代码的头文件? 为了方便其他人搞清楚,我在zip文件中放置了原始图像,原始标题和mbin2h生成的标题: image problem.zip – 319.73 这实际上是OpenBOR,我只想修改菜单图像,但因为我不知道如何编程,所以我需要一些帮助,抱歉。 编辑:我没有看到有一个答案按钮,我会把答案提出来。 对不起大家。

SDLNet网络无法正常工作

我正在使用SDL编写一个用C语言编写的游戏。 鉴于它已经使用了SDL,SDL_image和SDL_ttf,我决定将SDL_mixer和SDL_net添加到我的引擎中。 让SDL_mixer设置和工作非常简单,但我在使用SDL_net时遇到了很多麻烦。 为了测试我使用以下规则创建了一个非常简单的应用程序: 不带参数的运行充当端口9999上的TCP服务器 使用参数运行尝试连接到端口9999上给定IP地址的服务器 以下是该程序的一些关键行(我不会发布我的整个事件驱动的SDL引擎,因为它太长了): char *host = NULL; if (argc > 1) host = argv[1]; 和… IPaddress ip; TCPsocket server = NULL; TCPsocket conn = NULL; if (host) { /* client mode */ if (SDLNet_ResolveHost(&ip,host,port) < 0) return NULL; //this is actually inside an engine method if (!(conn = SDLNet_TCP_Open(&ip))) return NULL; […]

如何在SDL中创建颜色渐变

SDL没有这样的function,好奇,如果过去有人做过这件事,并且不介意让我朝着正确的方向前进。 我想在两种颜色之间创建一个渐变,以反映在矩形的高度上。

最大化SDL窗口

我该如何告诉SDL最大化应用程序窗口? 我正在用这些标志创建窗口:SDL_OPENGL | SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_RESIZABLE。

我是否应该在一个线程中锁定一个变量,如果我只需要在其他线程中使用它的值,为什么我不这样做呢?

我知道这个问题 ,但我相信我的担忧是非常不同的。 我最近使用线程和OpenGL创建了一个SDL应用程序。 我有一个线程在循环中运行,它不断更新我绘制到屏幕的对象的状态。 状态非常简单,它只是一个布尔数组(当数组值为true时,我绘制它,当它为假时,我没有)。 目前,我的任何变量都没有互斥锁,一切正常。 即使只有一半的状态数组在绘制之间更新,帧速率也要高得多(或至少等于)更新速率,因此具有半更新状态是可以接受的。 现在,我最初在使用中断的嵌入式系统上开始研究类似的想法。 每隔一段时间,一个中断就会触发,更新状态数组,执行将继续。 现在我正在使用多核桌面,并同时更新arrays,我想知道为什么没有发生任何不好的事情,因为我在技术上同时读取和写入相同的内存位置。 是偶然的,还是有没有原因导致没有发生内存访问冲突? 如果在使用该值之前,期间或之后变量的状态是可以接受的,那么我是否应该使用互斥锁? 谢谢您的帮助。 编辑:附加信息 – 数组是动态创建的,但是当它被创建/删除时,我确实使用了互斥锁(我认为访问已删除的内存不会看起来很友好:P)。

在C学习SDL

我知道C的基础知识,我正在研究SDL。 我现在需要的是一些教程,文档或者有关在C中使用SDL库的书,尤其是有关图形的书。 问题是我发现的每个在线资源都与C ++有关,我在C中寻找资源。 我看过gpwiki.org,它有关于C的整个部分,但是mingw不会编译它,因为一些包含C ++库(我只安装了C编译器)。 像sol.gfxile.net/gp/这样的其他来源说它们是C语言教程,但是“使用C ++来方便地放松变量放置规则。” SDL站点上的大多数教程都基于C ++。 有没有人知道C语言中用于SDL编程的良好学习资源?