Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LibGDX基本阶段绘制错误_Java_Libgdx - Fatal编程技术网

Java LibGDX基本阶段绘制错误

Java LibGDX基本阶段绘制错误,java,libgdx,Java,Libgdx,我正在尝试创建一个游戏,但我的代码不断给我错误: Exception in thread "LWJGL Application" java.lang.IllegalArgumentException: no uniform with name 'u_projModelView' in shader at com.badlogic.gdx.graphics.glutils.ShaderProgram.fetchUniformLocation(ShaderProgram.java:287) at c

我正在尝试创建一个游戏,但我的代码不断给我错误:

Exception in thread "LWJGL Application" java.lang.IllegalArgumentException: no uniform with name 'u_projModelView' in shader
at com.badlogic.gdx.graphics.glutils.ShaderProgram.fetchUniformLocation(ShaderProgram.java:287)
at com.badlogic.gdx.graphics.glutils.ShaderProgram.fetchUniformLocation(ShaderProgram.java:277)
at com.badlogic.gdx.graphics.glutils.ShaderProgram.setUniformMatrix(ShaderProgram.java:507)
at com.badlogic.gdx.graphics.glutils.ShaderProgram.setUniformMatrix(ShaderProgram.java:498)
at com.badlogic.gdx.graphics.glutils.ImmediateModeRenderer20.flush(ImmediateModeRenderer20.java:147)
at com.badlogic.gdx.graphics.glutils.ImmediateModeRenderer20.end(ImmediateModeRenderer20.java:160)
at com.badlogic.gdx.graphics.glutils.ShapeRenderer.end(ShapeRenderer.java:1104)
at com.badlogic.gdx.graphics.glutils.ShapeRenderer.check(ShapeRenderer.java:1092)
at com.badlogic.gdx.graphics.glutils.ShapeRenderer.rect(ShapeRenderer.java:389)
at com.badlogic.gdx.scenes.scene2d.ui.Table.drawDebugRects(Table.java:1224)
at com.badlogic.gdx.scenes.scene2d.ui.Table.drawDebug(Table.java:1204)
at com.badlogic.gdx.scenes.scene2d.Group.drawDebugChildren(Group.java:156)
at com.badlogic.gdx.scenes.scene2d.Group.drawDebug(Group.java:139)
at com.badlogic.gdx.scenes.scene2d.Stage.drawDebug(Stage.java:169)
at com.badlogic.gdx.scenes.scene2d.Stage.draw(Stage.java:132)
at net.lukshe.lukshegame2.screens.MainMenu.render(MainMenu.java:71)
at com.badlogic.gdx.Game.render(Game.java:46)
at net.lukshe.lukshegame2.LuksheGame.render(LuksheGame.java:23)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:215)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)
MainMenu.java:

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL30;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle;

public class MainMenu implements Screen {

private Stage stage; //done
private TextureAtlas atlas; //done
private Skin skin; //done
private Table table; //done
private TextButton buttonplay, buttonexit;
private BitmapFont white; //done
private Label heading;

@Override
public void show() {
    stage = new Stage();

    atlas = new TextureAtlas("ui/button.pack");
    skin = new Skin(atlas);
    table = new Table(skin);
    table.setBounds(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    white = new BitmapFont(Gdx.files.internal("font/white.fnt"), false);

    //Set the button style
    TextButtonStyle textButtonStyle = new TextButtonStyle();
    textButtonStyle.up = skin.getDrawable("buttonup");
    textButtonStyle.down = skin.getDrawable("buttondown");
    textButtonStyle.pressedOffsetX = 1;
    textButtonStyle.pressedOffsetY = -1;
    textButtonStyle.font = white;
    textButtonStyle.fontColor = Color.BLACK;

    //Creating exit button
    buttonexit = new TextButton("Exit", textButtonStyle);
    buttonexit.pad(20);

    //Add button to the table
    table.add(buttonexit);

    //Debug
    table.debug();

    //Add table to the stage
    stage.addActor(table);

}

@Override
public void render(float delta) {
    //OpenGL settings
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);

    //Render at the speed of delta
    stage.act(delta);

    //Draw stage
    stage.draw();

}
LuksheGame.java:

public class LuksheGame extends Game {

public static final String NAME = "Lukse game (LibGDX)", VERSION = "Pre-Alpha 0.0.0.2";

@Override
public void create() {
    setScreen(new Splash());
}

@Override
public void dispose() {     
    super.dispose();
}

@Override
public void render() {
    super.render();
}

@Override
public void resize(int width, int height) {     
    super.resize(width, height);
}

@Override
public void pause() {
    super.pause();
}

@Override
public void resume() {      
    super.resume();
}
}

如果有人能帮助我,请帮助我

编辑: MainMenu.java是从Splash.java调用的。在Splash类中,我使用Tween引擎来增加和减少启动屏幕的不透明度。 Splash.java:

public class Splash implements Screen {

private SpriteBatch batch;
private Sprite splash;
private TweenManager twm;


@Override
public void show() {
    batch = new SpriteBatch();
    twm = new TweenManager();
    Tween.registerAccessor(Sprite.class, new SpriteAccessor());

    Texture splashtexture = new Texture(Gdx.files.internal("images/splash.png"));
    splash = new Sprite(splashtexture);
    splash.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    Tween.set(splash, SpriteAccessor.alpha).target(0).start(twm);
    Tween.to(splash, SpriteAccessor.alpha, 2).target(1).repeatYoyo(1, 2).setCallback(new TweenCallback() {
        @Override
        public void onEvent(int type, BaseTween<?> source) {
            ((Game) Gdx.app.getApplicationListener()).setScreen(new MainMenu());
        }
    }).start(twm);
}

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);

    twm.update(delta);

    batch.begin();
    splash.draw(batch);
    batch.end();

}

@Override
public void resize(int width, int height) {

}

@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void hide() {

}

@Override
public void dispose() {
    batch.dispose();
    splash.getTexture().dispose();
}
公共类启动屏幕{
专用SpriteBatch批次;
私人雪碧飞溅;
私人TweenManager;
@凌驾
公开展览({
批次=新的SpriteBatch();
twm=新的TweenManager();
Tween.registerAccessor(Sprite.class,新的SpriteAccessor());
纹理splashtexture=新纹理(Gdx.files.internal(“images/splash.png”);
飞溅=新的精灵(飞溅纹理);
setSize(Gdx.graphics.getWidth(),Gdx.graphics.getHeight());
二者之间。设置(飞溅,SpriteAccessor.alpha)。目标(0)。启动(twm);
Tween.to(splash,SpriteAccessor.alpha,2).target(1.repeatYoyo(1.2.setCallback)(新TweenCallback()){
@凌驾
public void onEvent(int类型,BaseTween源){
((游戏)Gdx.app.getApplicationListener()).setScreen(新主菜单());
}
}).启动(twm);
}
@凌驾
公共无效渲染(浮动增量){
glClearColor(0,0,0,1);
Gdx.gl.glClear(GL30.gl\u颜色\u缓冲\u位);
twm.更新(增量);
batch.begin();
喷溅.抽(批);
batch.end();
}
@凌驾
公共空心调整大小(整型宽度、整型高度){
}
@凌驾
公共空间暂停(){
}
@凌驾
公众简历(){
}
@凌驾
公共空间隐藏(){
}
@凌驾
公共空间处置(){
batch.dispose();
splash.getTexture().dispose();
}

}

格式化堆栈跟踪首先,如果只调用超级方法,则不需要覆盖游戏类中的所有方法。接下来,我看不到您的代码中有任何明显的错误,您是否正在SplashScreen中执行某些操作?您是否在某个地方设置了自定义着色器?有没有其他代码会影响你在这里发布的内容?@pinkiewirl我正在使用Tween引擎,主菜单类会从初始屏幕中被调用。你能上传一个复制错误的最小版本吗?我不使用tween引擎,但我看起来不错。只有一件事,因为您不保留对屏幕的引用,也不在hide方法中调用dispose,所以您永远不会处理SplashScreen资源?偶数Game.dispose只调用Screen.hide@小指漩涡我已经尝试了一段时间,作为一名演员,我尝试添加按钮。似乎Table类只是舞台演员的无效参数。编辑:删除了table.debug()语句,现在一切正常