我正在开发一个libGDX(LWJGL上的库)游戏项目,并使用来自几个不同工作站的Intellij IDEA IDE:
我在Ubuntu盒子上使用OpenJDK for Java 6,在Windows盒子上使用Sun/Oracle Java 6(我听说Java 6是用于Android兼容性的那个).
在全屏幕上运行时:
进一步研究,我看到对Gdx.graphics.getHeight()和Gdx.graphics.getWidth()的调用返回覆盖两个显示所需的矩形的大小,在我的情况下是3200x1080,但当我告诉我的游戏时全屏运行,它只使用其中一个显示器,所以摄像机设置为1920x1080,但我的相机移动和平铺地图平移认为他们有3200x1080可以使用,使事情扭曲和无法使用(因为角色可以走开屏幕右侧).
我猜我的问题实际上来自awt.Toolkit的getScreenSize()调用返回的大小,但我不知道如何更深入地询问它以获得当我全屏时实际使用的屏幕大小.
我的DesktopStarter获取屏幕大小并设置全屏,如下所示:
LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
cfg.width = screenDimension.width;
cfg.height = screenDimension.height;
cfg.fullscreen = true;
new LwjglApplication(new Game1(), cfg);
Run Code Online (Sandbox Code Playgroud)
是否有解决方案来获得"全屏"实际启动的显示器的高度/宽度?
所以我遇到的麻烦就是执行game.jar文件,退出游戏,然后重复执行,导致Gdx.graphics.getDisplayModes()返回的模式列表中显示不同的显示模式 - 正如PT在下面指出的那样,这是一个围绕LWJGL的薄包装Display.getAvailableDisplayModes().为什么会这样?为什么在Ubuntu的后续运行中会出现一组不同的模式?
编辑:根据PT的建议,将LWJGL引用置于问题,因为它似乎是LWJGL提供的显示模式列表.
谢谢!
我一直在用Slick2D钻研游戏编程,我开始怀疑从长远来看,知道LWJGL会更有帮助.一方面,Slick2D快速而简单,但似乎LWJGL在具有2D和3D功能的意义上更具适应性.对于那些处于java中间位并且想要制作游戏的人来说,是否值得花费额外的努力来立即学习LWJGL?
我发现的唯一的东西是Penumbra,它似乎包含了OpenGL 1.1,我至少不在乎.它实际上不需要做任何花哨的事情,LWJGL的包装器在一个命名空间中暴露OpenGL 3.3/core或OpenGL 4.x/core就足够了 - 我不介意一个更惯用的包装器,只要它不做任何立即模式绘图并支持GLSL 3.3我基本上很开心.
请注意,这与此问题不同,因为它不处理链接,因为它不询问如何通过CLI链接它,而是在Eclipse中使用GUI.
我一直在尝试使用LWJGL编写一个简单的程序.当我将库添加到Eclipse(Windows 7 64bit上的Kepler 4.3.1)并编写程序时,它不会在使用LWJGL的东西下显示红色波浪形.但是,尝试运行它会给我以下堆栈跟踪:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.lwjgl.Sys$1.run(Sys.java:73)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
at org.lwjgl.Sys.loadLibrary(Sys.java:95)
at org.lwjgl.Sys.<clinit>(Sys.java:112)
at org.lwjgl.opengl.Display.<clinit>(Display.java:135)
at DisplayExample.start(DisplayExample.java:8)
at DisplayExample.main(DisplayExample.java:23)
Run Code Online (Sandbox Code Playgroud)
(是的,这是他们首先提供的示例,但我想运行它以确保所有内容都已正确安装)
我的问题是,我该如何解决这个错误?请注意,即使在Eclipse中运行,它仍然会失败.如果我运行其他不使用LWJGL的东西,它也可以.我刚从互联网上下载它 - 它只有一个版本,所以我认为它是正确的.从我所看到的情况来看,其他问题都不会出现与我相同的错误 - 但如果你能指出我也会提供有用的信息问题.
我正在尝试从LWJGL网站运行示例"Hello World"
从这个链接:LWJGL"入门"
我试图通过命令行来做到这一点,所以我理解"幕后"更好一点.
我已经设法编译没有任何错误,但当我尝试运行该程序时,我收到此错误:
C:\JavaProjects\LearningLWJGL>java -classpath .;./lib/*.jar -Djava.library.path=C:\Windows\System32 HelloWorld
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/lwjgl/glfw/GLFWKeyCallback
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetMethodRecursive(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.lwjgl.glfw.GLFWKeyCallback
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 7 more
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
是否可以LWJGL使用Slick Framework 加载PNG纹理并在不使用字符串绘制字符串?
每次我google "如何在lwjgl中加载png图像"我得到这样的答案 - > "嘿,只需使用光滑框架中的textureloader ".
同为"如何绘制在LWJGL串" - > "只使用TTFFont类从光滑的框架"
但我不想使用这种中途交叉框架设计.因为我认为这不是最好的方法.
是否有任何库或扩展LWJGL仅用于纹理或字符串?
我将OpenGL中的场景以低分辨率渲染到帧缓冲区中.然后我打算将这个版本绘制到整个屏幕上(用GL_NEAREST进行升级).我使用纹理blitting(glBlitFramebuffer)来做到这一点.在我的Nvidia GPU上,这可以工作,但是当我在Intel i7集成显卡上执行完全相同的代码时,目标帧缓冲区上的y位置似乎是错误的(即图像渲染得太远了).
glGetError没有返回错误.由于Nvidia的驱动程序往往非常宽容,我希望我错过了Nvidia不关心的OpenGL规范中的细节.我搜索了互联网和stackoverflow,无法找到描述的类似问题.两位司机都报告支持OpenGL 3.0
我的绘图代码:
//setup viewport for small image
glPushAttrib(GL_VIEWPORT_BIT);
glViewport(0, 0, image.getWidth(), image.getHeight());
//bind small framebuffer
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
glDrawBuffers(GL_COLOR_ATTACHMENT0);
glClear(GL_COLOR_BUFFER_BIT);
//draw
renderRotatedFull(1);//nothing interesting at all happening here
//reset Viewport
glPopAttrib();
//prepare and execute blitting
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
glReadBuffer(GL_COLOR_ATTACHMENT0);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glDrawBuffers(GL_BACK_LEFT);
glBlitFramebuffer(0, 0, image.getWidth(), image.getHeight(), 0, 0, Game.width,
Game.height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
//throws exception if there is an OpenGL error
org.lwjgl.opengl.Util.checkGLError();
Run Code Online (Sandbox Code Playgroud)
初始化完成如下:
fbo =glGenFramebuffers();
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
rbo = glGenRenderbuffers();
glBindRenderbuffer(GL_RENDERBUFFER, rbo);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, image.getWidth(), image.getHeight());
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, …Run Code Online (Sandbox Code Playgroud) 我正在尝试从-desktop特定类设置应用程序图标:
package org.osgameseed.games.animalflip;
import com.badlogic.gdx.Files;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
public class Main {
public static void main(String[] args) {
LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
cfg.title = "AnimalFlip";
cfg.useGL20 = false;
cfg.width = 800;
cfg.height = 600;
cfg.addIcon("data/ic_launcher.png", Files.FileType.Internal);
new LwjglApplication(new AnimalFlipGame(), cfg);
}
}
Run Code Online (Sandbox Code Playgroud)
图标未设置(至少在Linux上),有关如何设置的任何想法?
此问题现已修复.我的着色器属性没有正确绑定.
我有一个游戏,从IDE运行时看起来像这样:
但是,当我使用这些设置从Eclipse导出它时,
纹理完全不正确.纹理仍然加载,但它们没有正确地包装到对象上.
代码完全相同,因为我刚刚导出它,而且我目前同时运行游戏的两个窗口(一个在IDE中工作正常,一个从导出的JAR看起来很奇怪).
我还将IDE目录中的所有资源复制到具有外部JAR的文件夹中.IDE目录:

此外,我知道纹理实际上正在加载 - 它们没有正确包装.我知道这是因为:
我已经检查了JAR文件,片段和顶点着色器仍在那里.正确的库也似乎在那里(此外,如果不是,游戏甚至不会开始).

更新:当我多次重新启动游戏以检查更多信息时,我注意到,只要显示器显示(因此我可以看到纹理不正确的地形和平面),游戏就会冻结大约90%的时间.没有Stacktrace,只是"这个窗口没有响应,窗口正在关闭它".当我在IDE中运行游戏时,游戏仍能完美运行而不会崩溃.
游戏服务器导出并运行完美.只有客户才是问题.
那么导出可以使游戏与在IDE中运行游戏有什么不同,我该如何解决呢?
更新:所以这是我的纹理加载代码:
loader.loadTexture("PlaneTexture", 1);
//loadTexture() method:
public int loadTexture(String fileName, int mipmap) {
Texture texture = null;
try {
try{
texture = TextureLoader.getTexture("PNG", new FileInputStream("res/" + fileName + ".png")); //TextureLoader is a Slick-Util class.
}catch (Exception e){
e.printStackTrace();
}
if (texture == null){
throw new Exception("Null texture!");
}
//texture = TextureLoader.getTexture("GIF", new FileInputStream("res/" + fileName + ".png"));
if (mipmap > …Run Code Online (Sandbox Code Playgroud)