java 能不能和sdl配合使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 能不能和sdl配合使用相关的知识,希望对你有一定的参考价值。

参考技术A Simple DirectMedia Layer, 简称SDL,是一个自由的跨平台的多媒体开发包,主要通过OpenGL和2D视频帧缓冲(framebuffer)提供对音频、键盘、鼠标、游戏操纵杆(joystick)和3D硬件的底层访问。它被广泛的应用于MPEG回放软件、模拟器和多个著名游戏中,如获得大奖的《文明:权倾天下》(Civilization: Call To Power)的Linux移植版本。它的官方站点是:http://www.libsdl.org/ ,还有一个非常个性的LOGO。
在Win32编程中,如果要操纵2D图像,可以选择使用GDI或者DirectDraw,前者速度较慢,而后者是特定针对Microsoft平台的,在非Win32平台上移植会带来很大的麻烦。这时,你可以选择使用SDL。SDL支持多种平台:Linux、Windows, BeOS, MacOS Classic, MacOS X, FreeBSD, OpenBSD, BSD/OS, Solaris, IRIX和QNX,同时也部分支持部分其他平台:Windows CE, AmigaOS, Dreamcast, Atari, NetBSD, AIX, OSF/Tru64, RISC OS和SymbianOS。
当然SDL本身是针对2D图像编程的,如果使用到3D编程,那么需要将SDL和OpenGL结合使用。
参考技术B 可以,有Java binding叫jsdl,source forge上有主页 参考技术C 可以的,用JNI就可以调用了

游戏开发:(Java 和 OpenGL)还是(C++ 和 OpenGL 和 SDL)? [关闭]

【中文标题】游戏开发:(Java 和 OpenGL)还是(C++ 和 OpenGL 和 SDL)? [关闭]【英文标题】:GameDevelopment: (Java & OpenGL) or (C++ & OpenGL & SDL)? [closed] 【发布时间】:2011-03-07 16:18:47 【问题描述】:

既然 Java 支持 OpenGL,那么开发游戏的最佳选择是什么?

Java + OpenGL C++ + SDL + OpenGL

我总是避免使用 Java(当然是在游戏开发中),因为它的速度。但是,我发现 Java 支持 OpenGL。所以,我认为速度不再是问题了。你应该选择什么?有备注吗?

由于我在 Java 和垃圾收集器方面的经验,Java 对我来说会容易得多。

【问题讨论】:

java 并不慢。 java程序员写的代码很慢。 API 绑定到语言的可用性并不能说明语言实现的性能。此外,OpenGL 是实现语言绑定几乎没有障碍的 API 之一,无论是什么语言。 @Erik java 很慢。它没有您可以在内存中布局的自定义值类型(仅引用)。因此,在对对象进行迭代时,您无法充分利用处理器缓存。缓存未命中会导致显着放缓 【参考方案1】:

在我看来,如果您对游戏有一个想法,那么(一开始)用什么来编写它并不重要,C/C++、Java、笔和纸...选择您喜欢的语言'一旦你有了一个粗略的草图并知道你需要做什么,就可以更熟悉、原型化和测试你的游戏创意,扔掉原型,设计游戏玩法和架构,然后开始编写实际的东西。等到大部分或所有功能都正常工作(一般来说,总会有一些小错误要寻找)并且真正看到瓶颈在哪里之后,再进行优化。

我已经看到它一遍又一遍地发生,游戏程序员是最糟糕的过早优化者之一,他们试图从琐碎的事情中挤出几个周期,同时错过最大的瓶颈,然后再优化一些(在错误的地方)。我也多次为此感到内疚。我想说不要因为速度而选择 C++(或 Java),如果做得“正确”,你可以从两者中获得非常好的性能。如果需要,您可以随时切换到另一种语言,如果语言本身确实是瓶颈或确实阻止您做某事。 Java 不会自动变慢,C++ 也不会自动变快,两者都可能(非常)出错。我曾经在所有方面都支持 C 和 C++,但在使用 Java 一段时间后,我真的不会错过所有的麻烦。

有很多(已经优化且相当容易使用的)游戏引擎可用于两种语言,所以没有必要自己动手......除非你真的想要。根据我的经验,大多数业余爱好者“游戏程序员”往往对事物的技术方面更感兴趣,而不是对实际游戏(包括我自己);)一旦完成所有技术障碍,你就会得到那个漂亮的模型/一堆精灵/粒子效果与一些着色器效果一起运行,热情似乎消失了......但不要让我气馁,游戏编程很有趣,即使你从未真正完成任何事情(我不会称之为我自己的项目完成)。

我已经有一段时间没有编写任何游戏了,但是对于 C++ 2D,SDL 是一个不错的选择,其他选项可能是 SFML,或者如果您想要使用 OpenGL 进行较低级别的操作,您可以尝试使用GLFW + SOIL + 一些音频库。对于成熟的 3D,我会说尝试 OGRE 或 Irrlicht + Irrklang(可能还有很多其他的)。

在 Java 中,至少有 Slick2D、Golden T Game Engine 和较低级别的访问权限 LWJGL(尽管我认为您也可以通过 Slick2D 访问 LWJGL)。对于3D,有人向我推荐了jMonkeyEngine,但我从未尝试过。

【讨论】:

【参考方案2】:

我会投票支持 C++,因为您的对象中有一个可靠的析构函数。这使您可以包装许多 OpenGL 组件(缓冲区、纹理等)。可以知道,当对象被创建时,资产被分配,当对象被销毁(或超出范围)时,资产被清理。

它当然可以用 Java 完成。 Minecraft 是用 Java 制作的,它已经获得了超过 2500 万美元的收入。

【讨论】:

但我的世界不是用 C++ 重写的吗?什么叫做基岩版?我对游戏知之甚少(我的意思是玩游戏),但我认为我们需要检查哪个能赚到更多美元,C++ 的还是 Java 的。 2 分钟的谷歌搜索告诉我,Bedrock 适用于许多平台,而 Java 仅适用于 PC。从逻辑上恕我直言,基岩可能会获得更多。 嗯,是的。我的答案是10岁。世界变了,我的观点也变了。【参考方案3】:

Java 已被证明与 C++ 一样快,甚至比 C++ 快,尽管如此,但如果不进行一点参数调整和仔细监控垃圾收集器,就无法获得这样的结果。如果您想使用 Java 进行游戏设计,我会说这是一个不错的选择,前提是您先学习如何处理它。

【讨论】:

+1 - 慢代码在任何语言中都很慢。好的代码适用于任何语言。【参考方案4】:

我会选择 C++、SDL 和 OpenGL。SDL 目前正在使用 1.3 进行改进,它会非常好。在我看来,你应该用 C++ 来做,正如你所说的那样,你会对 Java 感到更舒服,在用 C++ 制作游戏后感到舒服将是非常有益的。您不仅可以制作游戏,还可以同时学习更多内容。

【讨论】:

【参考方案5】:

如果您采用 Java 路线,您可能需要将 JVM 与您的游戏一起提供。这并不是说不要这样做,而是很多人可能没有安装 Java,或者没有足够新的版本来满足您想要的功能和性能。我还没有研究过发布 JVM 的许可要求,但这可能是您在做出决定之前需要调查的内容。

您还应该意识到,在对应用进行高度调整时,尽管 Java API 在不同平台之间是相同的,但存在差异,因为它们的实现通常使用底层操作系统。所以我怀疑使用 Java 是否会减轻游戏的测试负担。

【讨论】:

【参考方案6】:

这真的取决于你最习惯的语言。与 java 相比,c++ 的学习曲线更陡峭。如果你不熟悉任何一种语言,并且渴望完成一些开发,我会推荐 java。

还有一点旁注。如果您是全新的,我也建议您查看 XNA,但它基于 DirectX。而且你必须了解一些 C#。

【讨论】:

【参考方案7】:

好吧,我已经用 SDL 编写了我所有的游戏,我肯定会推荐使用 c++。虽然你可能想看看 SFML!

http://www.sfml-dev.org/

SFML 已经与 OpenGL 集成,使用游戏编程很容易上手和运行。

【讨论】:

【参考方案8】:

这实际上取决于您想要构建哪种游戏以及您更熟悉哪种编程语言。

如果您计划将来制作大型游戏,C++ 最适合整体体验。大多数商业游戏都是用 C/C++ 编写的。微软也有使用 C# 的 XNA 框架

我还是会选择你更方便的编程语言,它们都很棒

不过,如果你不介意多学一点,那就选择 C++

【讨论】:

值得注意的是,大多数游戏都是使用 C/C++ 编写的,因为这在很长一段时间内都是如此。如今,许多游戏都包含了许多不同的语言。他们使用 python 和 LUA 编写脚本,使用 C++ 或 C# 或 Java 编写图形和引擎,他们中的大多数使用 OpenGL 或 DirectX 与显卡进行交互,而你使用哪种语言并不重要...

以上是关于java 能不能和sdl配合使用的主要内容,如果未能解决你的问题,请参考以下文章

解决QT 中使用SDL多次创建窗口不能渲染画面

解决QT 中使用SDL多次创建窗口不能渲染画面

使用 SDL2 和 xcode 4.6。我设法创建了一个 OpenGL 3.2 核心上下文。但是不能使用 glsl 1.50

SDL2 / Opengl3 无法显示任何内容

为啥 SDL_Mixer 不能播放某些 mp3 的音乐?

SDL:升级 OpenAudio 至 OpenAudioDevice 后不能播放音频