我试图使我的Java游戏的窗口可调整大小,它使用LWJGL库.根据可追溯到2007年的一些论坛问题,这只能通过解决方法实现.今天仍然如此吗?什么是路?
使用LWJGL时,指定GLSL版本会出现语法错误.我没有尝试在LWJGL之外重现这个问题.这是在运行Lion的多台Mac上发生的.
我已经使顶点和片段着色器无需使用即可工作#version.但我即将使用该texture函数,这似乎需要一个#version指令.
这是最简单的失败示例:
#version 120
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
编译此片段着色器并调用glGetShaderInfoLog会出现此错误:
ERROR: 0:1: '' : syntax error #version
Run Code Online (Sandbox Code Playgroud)
替换120其他任何东西,例如110,也会出错.但奇怪的是,如果我使用130或更高,它会给出相同的错误以及对不支持的版本的抱怨.(我知道我的系统没有GLSL 1.3,但是当编译器表现得像它不理解版本标签时,显示此错误仍然很奇怪.)
我在Mac上使用ATI的Radeon HD 4670. GL_VERSION是2.1 ATI-7.12.9和GL_SHADING_LANGUAGE_VERSION是1.20.
鉴于此,我认为没有任何理由说明为什么GLSL 1.20不可用.对我来说,这#version是一个非常奇怪的说它是一个语法错误,而不是说一个不受支持的GLSL版本.
经过两个小时的谷歌搜索(这里,这里,这里,这里,这里,以及其他一些我不想找到的东西),我以为我终于学会了将3D坐标转换为2D坐标的理论.但它没有用.我们的想法是将船舶的3D坐标转换为屏幕上的2D坐标,以呈现控制该船舶的玩家的用户名.
但是,文本呈现在错误的位置:

文本是"Test || 2DXCoordinate || 2DZCoordinate".
这是我的getScreenCoords()- 将3D坐标转换为2D.
public static int[] getScreenCoords(double x, double y, double z) {
FloatBuffer screenCoords = BufferUtils.createFloatBuffer(4);
IntBuffer viewport = BufferUtils.createIntBuffer(16);
FloatBuffer modelView = BufferUtils.createFloatBuffer(16);
FloatBuffer projection = BufferUtils.createFloatBuffer(16);
GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelView);
GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projection);
GL11.glGetInteger(GL11.GL_VIEWPORT, viewport);
boolean result = GLU.gluProject((float) x, (float) y, (float) z, modelView, projection, viewport, screenCoords);
if (result) {
return new int[] { (int) screenCoords.get(0), (int) screenCoords.get(1) };
}
return …Run Code Online (Sandbox Code Playgroud) 我基本上希望能够在我的LWJGL/GLFW线程启动后(和内部)启动一个新的Javafx窗口(阶段).我基本上是这样做的:
Thread thread = new Thread(()->Platform.runLater(()->{
Stage stage = new Stage();
//Stage setup
stage.show();
}));
thread.start();
Run Code Online (Sandbox Code Playgroud)
线程是我的游戏线程.但它永远不会运行,我试过一个System.out.println()内部Platform.runLater()只是为了检查它永远不会运行.
为什么它永远不会运行,我该怎么做才能解决它?谢谢.
编辑:只是为了澄清线程已经启动了什么,如果我这样做:
Thread thread = new Thread(()->{
System.out.println("Before Platform.runLater()");
Platform.runLater(()->System.out.println("Inside Platform.runLater()"));
System.out.println("After Platform.runLater()");
});
Run Code Online (Sandbox Code Playgroud)
它输出:
Before Platform.runLater()
After Platform.runLater()
Run Code Online (Sandbox Code Playgroud) new Sound("Res/MouseClick.ogg")当我尝试在类中的AudioPlayer第 15 行启动一个对象时,出现以下错误。
package com.game;
import java.util.HashMap;
import java.util.Map;
import org.newdawn.slick.Music;
import org.newdawn.slick.Sound;
public class AudioPlayer {
public static Map<String, Sound> soundMap = new HashMap<String, Sound>();
public static Map<String, Music> musicMap = new HashMap<String, Music>();
public static void load() {
try {
soundMap.put("menu_sound", new Sound("Res/MouseClick.ogg")); // <- throws error
musicMap.put("music", new Music("Res/Background.ogg"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static Music getMusic(String key) {
return musicMap.get(key);
}
public static Sound getSound(String …Run Code Online (Sandbox Code Playgroud) 最好,我想将OpenGL ES 2.0用于我开始制作的新3D游戏.无论如何,我一直在Ubuntu PC上开发它(不是顶级的,但体面的)我在2010年买的.
Gdx.graphics.isGL20Available()返回false,我很确定我的驱动程序支持3.3.0.这是我从glxinfo收到的:
name of display: :0.0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions:
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig,
GLX_SGIX_pbuffer, GLX_SGI_video_sync, GLX_SGI_swap_control,
GLX_EXT_swap_control, GLX_EXT_texture_from_pixmap, GLX_ARB_create_context,
GLX_ARB_create_context_profile, GLX_EXT_create_context_es2_profile,
GLX_ARB_create_context_robustness, GLX_ARB_multisample,
GLX_NV_float_buffer, GLX_ARB_fbconfig_float, GLX_EXT_framebuffer_sRGB
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_EXT_import_context, GLX_SGI_video_sync,
GLX_NV_swap_group, GLX_NV_video_out, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGI_swap_control, GLX_EXT_swap_control, GLX_ARB_create_context,
GLX_ARB_create_context_profile, GLX_NV_float_buffer,
GLX_ARB_fbconfig_float, GLX_EXT_fbconfig_packed_float,
GLX_EXT_texture_from_pixmap, GLX_EXT_framebuffer_sRGB,
GLX_NV_present_video, …Run Code Online (Sandbox Code Playgroud) 是否有一个很好的方法可以在Java中获得体面,可靠的数字采样声音播放?
我的请求列表非常简短:
拥有以下内容会很高兴,但实际上我可以没有它:
我已经尝试了臭名昭着的Java Sound API,但发现它完全不可靠,似乎无法满足我的最小愿望清单.我得到的问题:
在使用ALSA dmix(OpenJDK 6)的Linux上,在初始化Java Sound API时让任何其他应用程序使用音频只会使Java应用程序中的所有声音消失而不会出现任何错误/警告.
在Linux(OpenJDK 6)上,列出MixerInfos并尝试Clip使用其中任何一个获取对象时,在尝试加载wav文件时会引发以下异常:
java.lang.IllegalArgumentException: Line unsupported: interface Clip supporting format PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big-endian
Run Code Online (Sandbox Code Playgroud)
因此,AudioSystem.getClip(anySortOfMixer)似乎根本不起作用.只有AudioSystem.getClip()作品.
使用不同的采样率/位/格式加载文件Clip失败LineUnavailableException.似乎第一次调用clip.open将声音系统设置为特定声音选项,在调用后加载具有略微不同采样率的文件(例如,第一个是44100,第二个是48000)
在Linux(OpenJDK 6)上初始化几个不同的Clips并尝试播放它们只会使最后加载Clip声音 - 没有给出错误/警告,但只有play在最后Clip加载时才使用任何声音 - 所有其他声音都是静音的:
Clip loadSound(String name) {
URL url = this.getClass().getResource("/" + name + ".wav");
Clip …Run Code Online (Sandbox Code Playgroud)我试图在Java/LWJGL中制作一个简单的游戏.我正在关注在Windows上制作的教程,我正在使用mac.我抄他的代码打开了一个窗口,字符中的字符和程序崩溃立刻给了我一个非常漫长而奇怪的错误,可能有事情做与指针(其实我不知道).以下是创建窗口的行,我在其中使用了属性中定义宽度和高度的窗口:
window = glfwCreateWindow(width, height, "Flappy Bird", NULL, NULL);
Run Code Online (Sandbox Code Playgroud)
当我在我的Mac上运行它时,它给了我这个错误:
2015-10-12 13:18:38.475 java[496:31875] *** Assertion failure in + [NSUndoManager _endTopLevelGroupings], /SourceCache/Foundation/Foundation-1154/Misc.subproj/NSUndoManager.m:340
2015-10-12 13:18:38.476 java[496:31875] +[NSUndoManager(NSInternal) _endTopLevelGroupings] is only safe to invoke on the main thread.
2015-10-12 13:18:38.476 java[496:31875] (
0 CoreFoundation 0x00007fff98c3003c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x00007fff9620a76e objc_exception_throw + 43
2 CoreFoundation 0x00007fff98c2fe1a +[NSException raise:format:arguments:] + 106
3 Foundation 0x00007fff99f6199b -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
4 Foundation 0x00007fff99ee364f +[NSUndoManager(NSPrivate) _endTopLevelGroupings] + 156
5 AppKit 0x00007fff96ecbb95 -[NSApplication run] + 756
6 …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚为什么我的LWJGL3应用程序不能在NetBeans之外运行.我将所有本地人复制到同一个目录.作为Jar,如果我直接从Jar运行,我会收到错误:
[LWJGL] GLFW_API_UNAVAILABLE error
Description : WGL: The driver does not appear to support OpenGL
Stacktrace :
org.lwjgl.glfw.GLFW.nglfwCreateWindow(GLFW.java:1146)
org.lwjgl.glfw.GLFW.glfwCreateWindow(GLFW.java:1227)
com.alpha.core.Window.Init(Window.java:101)
com.alpha.core.Game.GameLoop(Game.java:33)
com.alpha.core.Game.Start(Game.java:23)
com.alpha.tests.Main.main(Main.java:11)
Exception in thread "main" java.lang.RuntimeException: Failed to create the GLFW window
at com.alpha.core.Window.Init(Window.java:103)
at com.alpha.core.Game.GameLoop(Game.java:33)
at com.alpha.core.Game.Start(Game.java:23)
at com.alpha.tests.Main.main(Main.java:11)
Run Code Online (Sandbox Code Playgroud)
图形驱动程序更新,如果我从IDE运行应用程序,所有的DLL都在那里,我不知道是什么导致这个.
任何帮助将不胜感激,提前感谢!
我有一个基本的LWJGL窗口设置,我正在尝试使用该glBegin(GL_QUADS)方法绘制一个正方形.Square square = new Square(25, 25, 25),是我调用Square类绘制正方形的方式......但它是一个矩形.当我打电话给它时,我将所有25个作为参数传递.前两个是起始坐标,最后25个是边长,如下所示.生成矩形我做错了什么?
public Square(float x,float y,float sl) {
GL11.glColor3f(0.5F, 0.0F, 0.7F);
glBegin(GL11.GL_QUADS);
glVertex2f(x, y);
glVertex2f(x, y+sl);
glVertex2f(x+sl, y+sl);
glVertex2f(x+sl, y);
glEnd();
}
Run Code Online (Sandbox Code Playgroud)
我的视口代码
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); // Resets any previous projection matrices
glOrtho(0, 640, 0, 480, 1, -1);
glMatrixMode(GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)