标签: sdl

如何在Windows上静态编译SDL游戏

我一直试图为我的游戏生成一个静态链接的"单二进制"版本的Windows.我想链接sdl,sdl_image和sdl_mixer,这反过来又引入了一些支持库.不幸的是我还没有找到一种方法来使用cygwin/mingw/gcc来编译和链接.据我所知,所有现有的公共版本只是共享库/ dll.

请注意,我不是在谈论许可.源将是开放的,因此sdl的GPL/LGPLness无关紧要.

windows sdl sdl-image sdl-mixer

14
推荐指数
1
解决办法
2万
查看次数

我应该将什么3D图形框架用于真实世界的游戏引擎?

我是一名C++程序员,拥有丰富的服务器编程经验.然而,我现在很无聊,我决定解决一个新领域:3D游戏编程,用于学习目的.另外,我认为如果我决定在这个领域工作,这个学习项目可能会成为未来的好简历材料.

我没有从头开始创建一个3D引擎,而是决定仿效我现有的一个:魔兽世界.如果你对原因感到好奇(随意跳过这个):

  • 这是一个真正的世界成功的游戏
  • 所有的地图纹理,模型和尚未完成的东西(我对学习如何用photoshop或其他东西绘制纹理不感兴趣)
  • 他们的文件格式或多或少完全是逆向工程
  • 已经有一个相同的开源项目(wowmapview),如果我遇到麻烦,我可以看看.

好的,这是一个很长的序言..现在,我的主要问题如下:我应该使用DirectX,OpenGL,sdl等包装库,还是什么?

在现实世界中最常用的是什么?

而且,让我感到困惑的其他事情:魔兽世界似乎正在​​使用两者!实际上,通常它使用DirectX,但您可以通过命令行使用"-opengl"开关启动它来使用opengl.

这在游戏中是常见的吗?他们为什么这么做?我想这是很多工作,根据我的理解,无论如何都没有人使用OpenGL(很少有人知道秘密切换).

如果这是通常做的事情,程序员通常会创建自己的3D引擎"包装器",如内部制作的SDL,并基于开关/ #defines/whatnot决定最终调用哪个API函数(DirectX或OpenGL)?或者这个功能是否已经内置在sdl中(您可以随意在DirectX和OpenGL之间切换)?

最后,你有任何书籍建议吗?

谢谢!

c++ opengl directx sdl

14
推荐指数
1
解决办法
1万
查看次数

SDL GUI库?

有人知道一个有标准小部件的好的SDL GUI库吗?它们中有很多都出现在谷歌中,但大多数看起来都像是在1992年才出现.

c++ user-interface sdl

14
推荐指数
1
解决办法
1万
查看次数

如何在macOS上禁用vsync

使用我的所有SDL/OpenGL程序,帧速率保持在60fps,因此看起来像vsync是启用,但不是我,也不是我的代码或我的设置.所以我想现在如果有办法禁用它,可能在一些深度macOS设置?

opengl macos sdl vsync

14
推荐指数
3
解决办法
2万
查看次数

如何在SDL2中禁用密钥重复?

曾经有一个SDL_EnableKeyRepeat()在SDL中命名的函数,但在SDL2中不再存在.

我在SDL2-wiki中搜索过但未能找到任何相关内容.

有任何想法吗?

sdl sdl-2

14
推荐指数
3
解决办法
1万
查看次数

使用 SDL2 渲染器绘制填充四边形/三角形的最快方法?

我有一个使用 SDL2 编写的游戏,以及用于绘图的 SDL2 渲染器(硬件加速)。有没有绘制填充四边形或三角形的技巧?

目前,我只是通过绘制大量线条(SDL_Drawlines)来填充它们,但性能很差。

我不想进入OpenGL。

c++ sdl sdl-2

14
推荐指数
1
解决办法
8890
查看次数

SDL 1.3/2.0设置

我过去几个月一直在使用sdl 1.2(在Windows上).我正在考虑迁移到1.3.所以我使用cmake和codeblocks来创建静态和动态的libray.now我很困惑如何编译一个程序.我包含了sdl.h header..added链接器中的静态库.但是当我尝试编译很多未定义的错误不断发生:

D:\using font\sdl_2test\main.c||In function 'SDL_main':|
D:\using font\sdl_2test\main.c|9|warning: passing argument 6 of 'SDL_CreateWindow' makes integer from pointer without a cast|
D:\GameDev\SDL-2.0\SDL-2.0.0-6799\include\SDL_video.h|405|note: expected 'Uint32' but argument is of type 'void *'|
D:\using font\sdl_2test\main.c|11|warning: control reaches end of non-void function|
..\..\GameDev\SDL_2\static\libSDL2.a(SDL_windowsmodes.c.obj)||In function `WIN_GetDisplayMode':|
D:\GameDev\SDL-2.0\SDL-2.0.0-6799\src\video\windows\SDL_windowsmodes.c|62|undefined reference to `CreateDCW@16'|
D:\GameDev\SDL-2.0\SDL-2.0.0-6799\src\video\windows\SDL_windowsmodes.c|71|undefined reference to `CreateCompatibleBitmap@12'|
D:\GameDev\SDL-2.0\SDL-2.0.0-6799\src\video\windows\SDL_windowsmodes.c|72|undefined reference to `GetDIBits@28'|
D:\GameDev\SDL-2.0\SDL-2.0.0-6799\src\video\windows\SDL_windowsmodes.c|73|undefined reference to `GetDIBits@28'|
D:\GameDev\SDL-2.0\SDL-2.0.0-6799\src\video\windows\SDL_windowsmodes.c|74|undefined reference to `DeleteObject@4'|
D:\GameDev\SDL-2.0\SDL-2.0.0-6799\src\video\windows\SDL_windowsmodes.c|75|undefined reference to `DeleteDC@4'|
..\..\GameDev\SDL_2\static\libSDL2.a(SDL_windowswindow.c.obj)||In function `WIN_GetWindowGammaRamp':|
D:\GameDev\SDL-2.0\SDL-2.0.0-6799\src\video\windows\SDL_windowswindow.c|530|undefined reference to `CreateDCW@16'|
D:\GameDev\SDL-2.0\SDL-2.0.0-6799\src\video\windows\SDL_windowswindow.c|532|undefined reference to `GetDeviceGammaRamp@8'|
D:\GameDev\SDL-2.0\SDL-2.0.0-6799\src\video\windows\SDL_windowswindow.c|536|undefined reference to …
Run Code Online (Sandbox Code Playgroud)

sdl mingw codeblocks

13
推荐指数
1
解决办法
3365
查看次数

SDL2:快速像素处理

我想在显示器上绘制像素,这些像素在某些参数后经常变化.EG如果红色和绿色像素发生碰撞,它们都会消失,等等.

在每一帧中,我必须操纵大约100-1000像素.我这里有一个多线程的方法,它不会给我30FPS(我想要的).目前我在RAM中存储了一个像素阵列,其中包含所有像素并且具有SDL_Surface.当数组中的像素发生变化时,它也会在Surface中发生变化,然后在完成所有操作后,会对屏幕进行blitting.我目前的做法太慢了,我对如何提高速度做了一些思考.

我目前的想法是:

  • 使用OpenGL直接在GPU上进行像素操作,一些论坛告诉我这比我目前的方法慢,因为"这不是GPU的工作原理"
  • 不要存储像素阵列,直接将BMP存储在RAM中,操作它然后将其移动到SDL_SurfaceSDL_Texture

关于如何以快速方式操作像素,还有其他方法吗?

c++ opengl sdl image-processing sdl-2

13
推荐指数
1
解决办法
1万
查看次数

SDL_PollEvent()空闲时口吃?

我使用SDL2在C++中拼凑了一个非常基本的游戏循环,我注意到每隔几秒,SDL_PollEvent似乎异常缓慢,即使什么也没发生.

我发送deltaTime来控制每个循环,它在SDL_PollEvent滞后的周期上差不多100ms.我已经通过移动我的计时器确认了这个功能,但我不确定在哪里进一步诊断问题.

我的循环:

while (!quit) {

    uint32_t startTime = SDL_GetTicks();

    while (SDL_PollEvent(&e) != 0) {
    std::cout << "Event: "<< e.type << std::endl; // Added later, read update
        if (e.type == SDL_QUIT) {
            quit = true;
        }
    }

    if (engine.AllowUpdate()) { // Restricts updates to every 20ms
        GameState::Update(); 
    }


    engine.rMan.BeginRender();
    //^v Literally just SDL_RenderClear and SDL_RenderPresent
    engine.rMan.FinishRender();

    engine.deltaTime = SDL_GetTicks() - startTime;
    std::cout << std::setw(10) << engine.deltaTime;
}
Run Code Online (Sandbox Code Playgroud)

控制台输出没有Vsync,请注意106.这是我的滞后:没有Vsync控制台输出

使用Vsync.请注意,滞后后的增量略短.不确定原因:Vsync控制台输出

我也注意到即使我没有调试也会发生这个问题,而且至少还有一台其他机器没有.任何有关如何进行的建议都将非常受欢迎.

编辑1:尝试打印以控制通过队列的所有事件,以查看其中一个是否导致问题.在上面的代码中添加了打印行.在有滞后的时候似乎没有发生任何事件,而我却无所事事.

编辑2:根据要求,一些可运行的代码,使用SDL 14在VS2017上使用SDL2-2.0.9构建:

#include <iostream>
#include <SDL.h>

void InitSDL();
void …
Run Code Online (Sandbox Code Playgroud)

c++ sdl game-engine sdl-2

13
推荐指数
1
解决办法
683
查看次数

无关窗口上奇怪的SDL副作用

当通过pysdl2与sdl2一起玩时,我注意到了一个奇怪的副作用,即一旦sdl脚本运行了不相关的窗口,这些窗口通常在移动时会变成半透明,现在却变得不透明。

如果不是因为the的感觉表明我在做根本上是错误的事情,我不会那么介意。

有人能启发我这里发生了什么吗?

这是我的脚本:

import sdl2
import sdl2.ext as se
import time

def main():
    k = 2
    event_buffer = (k * sdl2.SDL_Event)()
    se.init()
    window = se.Window("what the ?", size=(400, 300))
    window.show()
    while True:
        window.refresh()
        time.sleep(0.01)
        sdl2.SDL_PumpEvents()
        sdl2.SDL_PeepEvents(event_buffer, k, sdl2.SDL_GETEVENT,
                            sdl2.SDL_FIRSTEVENT, sdl2.SDL_LASTEVENT)
        for event in event_buffer:
            if not event.type:
                continue
            elif event.type == sdl2.SDL_QUIT:
                se.quit()
                break
            else:
                pass
            event.type = 0
        else:
            continue
        break

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

这是一个前后屏幕抓取:

之前

KDE 5.45.0没有运行sdl脚本的桌面的“系统设置”窗口,显示了相关的设置桌面Effects>Translucency。注意,窗口是半透明的,因为在拍照时我正在拖动它。

后

相同,但运行的是sdl脚本。请注意,尽管我大力拖动窗口,但窗口仍然顽固不透明。

python sdl kde window-management pysdl2

13
推荐指数
1
解决办法
286
查看次数