我正在关注一个在线教程,该教程使用LibGDX和IntelliJ IDEA制作太空射击游戏。一切正常,直到我添加了“ this.create()”和“ this.render()”函数。当添加它们时,它会导致堆栈溢出错误,我不知道如何解决它。



    package com.mygdx.spacegame;
    import com.badlogic.gdx.Game;
    import com.badlogic.gdx.Gdx;
    import com.badlogic.gdx.Input.Keys;
    import com.badlogic.gdx.graphics.GL20;
    import com.badlogic.gdx.graphics.Texture;
    import com.badlogic.gdx.graphics.g2d.SpriteBatch;

    public class MainGameClass extends Game {
        public static final float SPEED = 120;
        public SpriteBatch batch;
        Texture img;
        float x;
        float y;

        @Override
        public void create () {
            this.create();
            batch = new SpriteBatch();
            img = new Texture("badlogic.jpg");
        }

        @Override
        public void render () {
            this.render();
            Gdx.gl.glClearColor(1, 0, 0, 1);
            Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

            if (Gdx.input.isKeyPressed(Keys.UP)){
                y += SPEED * Gdx.graphics.getDeltaTime();
            }
            if (Gdx.input.isKeyPressed(Keys.DOWN)){
                y -= SPEED * Gdx.graphics.getDeltaTime();
            }
            if (Gdx.input.isKeyPressed(Keys.RIGHT)){
                x += SPEED * Gdx.graphics.getDeltaTime();
            }
            if (Gdx.input.isKeyPressed(Keys.LEFT)){
                x -= SPEED * Gdx.graphics.getDeltaTime();
            }

            batch.begin();
            batch.draw(img, x, y);
            batch.end();
        }

        @Override
        public void dispose () {
            batch.dispose();
            img.dispose();
        }
    }


当我运行不带功能的代码时,它运行得非常好,并且图像使用箭头键在屏幕上移动。但是当我重新添加两个函数时,出现此错误:


  线程“ LWJGL应用程序”中的异常com.badlogic.gdx.utils.GdxRuntimeException:java.lang.StackOverflowError
    在com.badlogic.gdx.backends.lwjgl.LwjglApplication $ 1.run(LwjglApplication.java:13> 3)
  造成原因:java.lang.StackOverflowError
    在com.mygdx.spacegame.MainGameClass.create(MainGameClass.java:20)
    在com.mygdx.spacegame.MainGameClass.create(MainGameClass.java:20)
    在com.mygdx.spacegame.MainGameClass.create(MainGameClass.java:20)
    在com.mygdx.spacegame.MainGameClass.create(MainGameClass.java:20)
    在com.mygdx.spacegame.MainGameClass.create(MainGameClass.java:20)
    在com.mygdx.spacegame.MainGameClass.create(MainGameClass.java:20)
    在com.mygdx.spacegame.MainGameClass.create(MainGameClass.java:20)
    在com.mygdx.spacegame.MainGameClass.create(MainGameClass.java:20)
    在com.mygdx.spacegame.MainGameClass.create(MainGameClass.java:20)


自从我使用Java以来​​已经有一段时间了,而且我对LibGDX完全陌生,所以我什至不知道从哪里开始,而且我也找不到在线任何相关的解决方案。希望这里有人可能知道问题所在。

最佳答案

create方法调用本身会创建无休止的调用。

没有任何停止标志就无法完成。只需删除this.create();

public void create () {
            this.create();

07-28 03:56