您能否解釋一下為什么我在初始化 ShapeRenderer 時會得到 NPE?我嘗試熟悉 LibGdx,從基礎開始,但我一開始就卡住了。
我有 2 個課程,它們是:
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
public class MyGdxGame extends ApplicationAdapter {
private ShapeRenderer shape;
@Override
public void create () {
shape = new ShapeRenderer();
}
@Override
public void render () {
shape.begin(ShapeRenderer.ShapeType.Filled);
shape.circle(50, 50, 50);
shape.end();
}
}
和主類,包括入口點:
public class DesktopLauncher {
public static void main(String[] args) {
MyGdxGame game = new MyGdxGame();
game.create();
game.render();
}
}
不幸的是,我得到了帶有以下錯誤的 NPE:
Exception in thread "main" java.lang.NullPointerException
at com.badlogic.gdx.graphics.glutils.ShaderProgram.loadShader(ShaderProgram.java:204)
at com.badlogic.gdx.graphics.glutils.ShaderProgram.compileShaders(ShaderProgram.java:183)
at com.badlogic.gdx.graphics.glutils.ShaderProgram.<init>(ShaderProgram.java:166)
at com.badlogic.gdx.graphics.glutils.ImmediateModeRenderer20.createDefaultShader(ImmediateModeRenderer20.java:241)
at com.badlogic.gdx.graphics.glutils.ImmediateModeRenderer20.<init>(ImmediateModeRenderer20.java:55)
at com.badlogic.gdx.graphics.glutils.ShapeRenderer.<init>(ShapeRenderer.java:116)
at com.badlogic.gdx.graphics.glutils.ShapeRenderer.<init>(ShapeRenderer.java:111)
at com.badlogic.gdx.graphics.glutils.ShapeRenderer.<init>(ShapeRenderer.java:107)
at game.MyGdxGame.<init>(MyGdxGame.java:10)
at game.DesktopLauncher.main(DesktopLauncher.java:6)
Process finished with exit code 1
一件重要的事情,我正在使用 Maven,因為我對 Gradle 不太了解,可能會導致問題嗎?無論如何,我的 Pom.xml 是:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example.mylibgdx</groupId>
<artifactId>mylibgdx</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<com.badlogicgames.gdx.version>1.11.0</com.badlogicgames.gdx.version>
</properties>
<repositories>
<repository>
<id>gdx-nightlies</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.badlogicgames.gdx</groupId>
<artifactId>gdx</artifactId>
<version>${com.badlogicgames.gdx.version}</version>
</dependency>
</dependencies>
</project>
提前謝謝你的幫助!
uj5u.com熱心網友回復:
問題不在于 Maven,而在于您啟動應用程式的方式。
在您的 main 方法中,您創建一個游戲并開始渲染,而 libGdx 功能尚未初始化。啟動您的應用程式的通常方式看起來有點像這樣(對于桌面應用程式):
public static void main (String[] arg) {
Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
config.setForegroundFPS(60);
config.setTitle("My GDX Game");
new Lwjgl3Application(new MyGdxGame(), config);
}
這樣你的游戲就創建好了,但是當 libGdx 后端準備好時,libGdx 負責呼叫你的游戲類的渲染方法。
如果您下載 libGdx 設定工具(下載鏈接)并創建一個專案,您可以選擇您希望游戲可在其上運行的應用程式型別(桌面、android、ios、html)。該工具將在每個專案中生成一個主類,以正確啟動游戲。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/488029.html
