标签: sdl

Haskell或Ocaml与Windows的OpenGL和SDL预编译分发

我想学习Ocaml或Haskell,我想通过编写一个简单的游戏来实现.显然,有一个小问题:没人关心Windows,我想在Windows上本地做.

Haskell有Cabal,它有SDL,但由于没有变通方法(传递给gcc的参数顺序)的小问题,它没有构建.Ocaml甚至没有它,它都在源包中,无论是GLCaml还是OcamlSDL等等.

有没有一个地方我可以在Windows上获得Haskell或Ocaml的工作SDL而无需与十几个版本的编译器打架?

windows opengl ocaml haskell sdl

10
推荐指数
1
解决办法
1876
查看次数

如何在SDL中扩展到分辨率?

我正在使用SDL和C++编写2D平台游戏.但是我遇到了涉及扩展到分辨率的巨大问题.我希望游戏在全高清中看起来不错,因此游戏的所有图像都已创建,因此游戏的自然分辨率为1920x1080.但是,如果有人使用较小的分辨率,我希望游戏缩小到正确的分辨率,如果有人使用更大的分辨率,我希望缩小比例.

问题是我无法找到一种有效的方法来实现这一点.我首先使用SDL_gfx库预先缩放所有图像,但这不起作用,因为它会产生大量的逐个错误,一个像素丢失的地方.并且由于动画播放时我的动画包含在一个图像中,因此动画会在每帧上下移动.

经过一番回顾后,我尝试使用opengl来处理缩放.目前我的程序将所有图像绘制到一个1920x1080的SDL_Surface.然后,它将此曲面转换为opengl纹理,将此纹理缩放到屏幕分辨率,然后绘制纹理.这在视觉上很好用,但问题是它根本没有效率.目前我得到的最大fps为18 :(

所以我的问题是,是否有人知道将SDL显示缩放到屏幕分辨率的有效方法?

c++ opengl sdl

10
推荐指数
1
解决办法
9358
查看次数

在SDL 2中使用OpenGL有什么好处?

我假设SDL 2在后台使用OpenGL渲染(或者在Windows上使用DirectX),这个决定是由SDl本身做出的.

我已经看过教程直接在SDL中显示OpenGL的使用,并想知道有什么好处,如果你有直接使用OpenGL会得到什么?是否存在SDL本身无法实现的内容?

opengl sdl sdl-2

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

SDL2:如何正确切换全屏?

我在使用我的程序停用全屏模式时遇到问题.输入全屏正确,但尝试返回窗口模式不起作用,唯一的效果是光标再次显示.

这是为我重现问题的MCVE/SSCCE:

void ToggleFullscreen(SDL_Window* Window) {
    Uint32 FullscreenFlag = SDL_WINDOW_FULLSCREEN;
    bool IsFullscreen = SDL_GetWindowFlags(Window) & FullscreenFlag;
    SDL_SetWindowFullscreen(Window, IsFullscreen ? 0 : FullscreenFlag);
    SDL_ShowCursor(IsFullscreen);
}

int main() {
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window* Window = SDL_CreateWindow("",
        SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);

    bool Exit = false;
    for (SDL_Event Event; !Exit;) {
        SDL_WaitEvent(&Event);
        if (Event.type == SDL_KEYDOWN) {
            switch (Event.key.keysym.sym) {
                case SDLK_f: ToggleFullscreen(Window); break;
                case SDLK_q: Exit = true; break;
            }
        }
    }
    SDL_DestroyWindow(Window);
    SDL_Quit();
}
Run Code Online (Sandbox Code Playgroud)

SDL_SetWindowFullscreen返回0,就像操作成功一样.我究竟做错了什么?(我在OS X 10.10.3上使用SDL 2.0.3.)

sdl fullscreen sdl-2

10
推荐指数
1
解决办法
9649
查看次数

SDL窗口不显示

这是我的代码:

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

int main(int argc, const char * argv[]) {

SDL_Init(SDL_INIT_VIDEO);

SDL_Window *_window;
_window = SDL_CreateWindow("Game Engine", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 700, 500, SDL_WINDOW_RESIZABLE);

SDL_Delay(20000);

SDL_DestroyWindow(_window);
SDL_Quit();

return 0;

}
Run Code Online (Sandbox Code Playgroud)

我在Xcode工作.我已下载SDL2并将库导入项目构建阶段.我已经测试过SDL2是否正常工作.

问题是窗口永远不会出现.我只是得到一个"旋转mac轮",然后程序在延迟后退出.我确保窗口没有隐藏在某处.

想法?

c++ xcode sdl

10
推荐指数
2
解决办法
5831
查看次数

C++ 2D像素完美碰撞检测库?

有哪些库可以与SDL和QT4集成.SDL或QT中是否有现有的软件包可以轻松实现这个?我正在寻找一个易于使用的库,可以让我拥有这样的功能

http://www.coreyoneil.com/portfolio/index.php?project=5

链接到Api/class示例/教程,它在您声明的库中实现了像素完美的碰撞检测,这正是我所寻找的.

编辑:请检查以上链接,了解我的意思是像素完美.

c++ qt sdl pixel collision-detection

9
推荐指数
1
解决办法
3049
查看次数

混合C和C++时使用nullptr而不是NULL

我有一个非常简单的问题......

我使用的是用C语言编写的SDL API.我正在使用C++.我的编译器支持关键字nullptr,我一直在阅读它.似乎使用而不是使用NULL宏更好.

当我调用SDL_SetVideoMode时,我假设它在失败时返回NULL,所以如果我这样做:

SDL_Surface *test = nullptr;

if ((test = SDL_SetVideoMode(params)) == nullptr)
{
    // to-do code
}
Run Code Online (Sandbox Code Playgroud)

这会准确地检查我在表面测试中的优化是否成功?

c++ sdl nullptr c++11

9
推荐指数
1
解决办法
1253
查看次数

在OS X 10.8上设置SDL

我不确定我应该如何设置SDL以使用我的mac.我有OS X 10.8.

我记得前一段时间在SDL页面上有OS X,Win和Linux的开发库.现在OS X丢失所以我猜我必须让linux一个工作?

我需要可用于OS X的运行时库.

我需要做什么才能在Xcode 4中完成所有工作?

复制运行时SDL.framework/Library/Frameworks,然后呢?

我非常感谢整个一步一步的程序,因为我对这些事情并不是最熟悉(但如果有必要,我确实知道一个或两个命令).

opengl macos xcode sdl

9
推荐指数
1
解决办法
4833
查看次数

使用SDL时未定义的WinMain @ 16引用

我一直在努力使一切正常工作,以便我可以开始在Windows上开发,就像Linux一样,这是我在编码时通常使用的.在尝试编译SDL程序时,我遇到了一个相当奇怪的问题.一旦我包含SDL库,程序就拒绝编译,给我这个错误:

c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libmingw32.a<main.o>: In function 'main':
C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference to 'WinMain@16'
collect2: ld returned 1 exist status
Run Code Online (Sandbox Code Playgroud)

我在控制台上使用MinGW.

举个例子,使用

gcc -o test main.c
Run Code Online (Sandbox Code Playgroud)

编译好:

#include <stdio.h>
#include <stdlib.h>

int main(int argv, char **argc)
{
    printf("Hello, world!\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是只要我添加#include(即使没有调用任何SDL函数),我也会收到上面提到的错误

使用:

gcc -o test main.c -lSDL
Run Code Online (Sandbox Code Playgroud)

这无法编译:

#include <stdio.h>
#include <stdlib.h>

#include <SDL/SDL.h>

int main(int argv, char **argc)
{
    printf("Hello, world!\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!我读到这对于忘记了主要功能的人来说是一个常见的问题,但显然这不是我的问题.我还听说WinMain是处理Windows图形程序时使用的主要功能,但是过去我曾经在Windows中进行更多开发时这对我来说从来都不是问题.

c windows sdl winmain

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

在支持的平台之间交叉编译SDL 2.0应用程序

我正在寻找一个"Hello World"SDL 2.0项目,该项目在所有支持的平台之间进行交叉编译:Windows,Linux,Mac,Android和iOS.有什么相似的吗?我在官方论坛或文档上找不到.

建议使用哪些工具?CMake还是SCons?可以用"制造"来完成吗?

sdl cross-compiling

9
推荐指数
1
解决办法
2210
查看次数