【问题标题】:LWJGL 2 Code Not Compatible with LWJGL 3 Code?LWJGL 2 代码与 LWJGL 3 代码不兼容?
【发布时间】:2016-02-11 22:38:14
【问题描述】:

我对使用外部 Java 库非常陌生,我从基于 LWJGL 构建的 Slick2D 开始。我写了一个简单的 StateBasedGame,它只在屏幕上打印三个选项。尽管某些(jar?)文件不存在,但它给了我一个错误(参见下文)。

这让我想起了一个事实,我遇到的大多数教程都是在一两年前制作的,当时 LWJGL 3 还没有问世或还不稳定。这意味着他们都在使用 LWJGL 2。问题是,我尝试使用 LWJGL 3 的许多代码不适用于最初用 LWJGL 2 编写的代码。这是为什么呢?如果我想学习 SLick2D,切换回 LWJGL 2 是否是个好主意?请帮忙,因为我编写的简单程序甚至都无法编译。

这是我的代码不起作用(至少在 LWJGL 3 中):

import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.StateBasedGame;

public class Game extends StateBasedGame {

    Menu menu;

    public Game(String title) {
        super(title);
        menu = new Menu(0);
    }

    public static void main(String[] args) {
        try {
            AppGameContainer agc = new AppGameContainer(new Game("Text Based"));
            agc.setDisplayMode(600, 600, false);
            agc.start();
        } catch (SlickException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void initStatesList(GameContainer container) throws SlickException {
        System.out.println("InitStates");
        addState(new Menu(0));
        getState(menu.getID()).init(container, this);
        enterState(menu.getID());
    }
}


import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;

public class Menu extends BasicGameState {

    private int ID;
    private int menu;

    public Menu(int id) {
        this.ID = id;
    }

    @Override
    public void init(GameContainer container, StateBasedGame sbg) throws SlickException {
    }

    @Override
    public void render(GameContainer container, StateBasedGame game, Graphics g) throws SlickException {
        g.setColor(Color.white);
        g.drawString("Higher or Lower", 50, 10);

        g.drawString("1. Play Game", 50, 100);
        g.drawString("2. High Scores", 50, 120);
        g.drawString("3. Quit", 50, 140);

    }

    @Override
    public void update(GameContainer arg0, StateBasedGame arg1, int arg2) throws SlickException {

    }

    @Override
    public int getID() {
        return ID;
    }

}

这是错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl64 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:72)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
    at org.lwjgl.Sys.loadLibrary(Sys.java:87)
    at org.lwjgl.Sys.<clinit>(Sys.java:117)
    at org.lwjgl.opengl.Display.<clinit>(Display.java:135)
    at org.newdawn.slick.AppGameContainer$1.run(AppGameContainer.java:39)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.newdawn.slick.AppGameContainer.<clinit>(AppGameContainer.java:36)
    at Game.main(Game.java:17)

【问题讨论】:

    标签: java lwjgl slick2d


    【解决方案1】:

    LWJGL 3 是对库的完全重写,因此 LWJGL 2 中的大多数代码自然无法使用它。 Slick2D 在底层仍然使用 LWJGL 2,这使得它与 LWJGL 3 不兼容。

    您遇到的错误是因为 Slick2D 调用了 LWJGL 2 显示功能,该功能试图加载 lwjgl64.dll 本机文件。但是,在 LWJGL 3 中,本机库已重命名(lwjgl32lwjgl 而不是 lwjgllwjgl64),因此找不到它。即使这样做了,同时加载两个版本的 dll 和 jars(Slick2D 的 LWJGL 2 和您的代码的 LWJGL 3)很可能无法正常工作。

    如果你想使用 Slick2D,你必须使用 LWJGL 2。不过,LWJGL 3 已经相当稳定,并且附带了一些帮助库,你可以使用这些库来完成加载图像文件等常见任务,所以我建议你至少使用看看它(它提供了一些不错的功能,例如多窗口支持)。

    【讨论】:

    • 好的,谢谢!这为我解决了很多问题,因为我找不到任何 lwjgl64.dll 文件,而我可以找到 lwjgl32.dll 文件。我很高兴你现在告诉我这些,因为这对我来说毫无意义。
    【解决方案2】:

    您的库路径中缺少 lwjgl64。 IE。你错过了原生部分。要么你没有把它放在你的 java.library 中,要么它从类路径和你的工作目录中丢失了。我相信它是一个适用于 Windows 的 .dll 和一个适用于 linux 的 .so,因此请确保您为您的项目正确包含 lwjgl,您应该没问题,但请在此处阅读:LWJGL3 Migration Guide

    【讨论】:

    • 我找不到任何名为 lwjgl64 的文件。到目前为止,我在网上找到的唯一一件事就是将我的“本机库位置”设置为我下载的文件中的“windows”文件夹。但这没有用......
    猜你喜欢
    • 2021-10-25
    • 2020-09-08
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多