[英]LibGDX - NullPointerException when using ShapeRenderer
[英]How to avoid NullPointerException when initalizing ShapeRenderer at LibGdx
你能解釋一下為什么我在初始化 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();
}
}
和主要的 class,包括入口點:
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>
提前謝謝你的幫助!
問題不是 Maven,而是你啟動應用程序的方式。
在您的主要方法中,您創建了一個游戲並開始渲染,而 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 后端准備好時調用你游戲 class 的渲染方法。
如果您下載 libGdx 安裝工具(下載鏈接)並創建一個項目,您可以 select 您希望游戲運行的應用程序類型(桌面、android、ios、html)。 該工具將在每個項目中生成一個 main class,從而正確啟動游戲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.