当前位置: 首页 > 知识库问答 >
问题:

libgdx屏幕渲染函数被调用但不绘图

伍溪叠
2023-03-14

我一直有一个问题,在我的屏幕渲染。

基本上,我有一个扩展游戏的整体类,我为我的游戏的各种页面创建了一些其他类,如主菜单、实际游戏等。当我在其中一个类上调用setScreen(屏幕)时,该屏幕的渲染循环被调用,但我似乎不能绘制任何东西。

我所做的是在整个游戏类中创建了正交摄影机和spritebatch,并通过它们的构造函数方法将其传递给屏幕。然而,我似乎什么都不会画。屏幕仍会清除背景。

很抱歉,我目前没有源代码,但大致如下:

这是我的整个游戏课程:

public class MyGdxGame extends Game {

public OrthographicCamera camera;
public SpriteBatch batch;
public ResourceManager Rm;

public StartScreen MainMenu;
public GameScreen CellTD;
public InstructionsScreen Instructions;
public PauseScreen Pause;

@Override
public void create() {      
    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();

    Rm = new ResourceManager();
    camera = new OrthographicCamera(1.0f, h/w);
    batch = new SpriteBatch();

    Rm.LoadTexture("Cell.png");

    MainMenu = new StartScreen(camera, batch, Rm, this);
    CellTD = new GameScreen(camera, batch, Rm, this);
    Instructions = new InstructionsScreen(camera, batch, Rm, this);
    Pause = new PauseScreen(camera, batch, Rm, this);

    setScreen(MainMenu);

}

@Override
public void dispose() {
}

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

@Override
public void pause() {
}

@Override
public void resume() {
}

}

这是我的屏幕课程之一:

public class StartScreen implements Screen{

private OrthographicCamera camera;
private SpriteBatch batch;
private ResourceManager Rm;
private int SCREEN_W, SCREEN_H;
public MyGdxGame Parent;
private Label Title;
private Sprite s;

StartScreen(OrthographicCamera c, SpriteBatch b, ResourceManager r, MyGdxGame g)
{
    camera = c;
    batch = b;
    Rm = r;
    SCREEN_W = Gdx.graphics.getWidth();
    SCREEN_H = Gdx.graphics.getHeight();
    Parent = g;

    camera.setToOrtho(false,1.0f,SCREEN_H/SCREEN_W);
    camera.update();

    Title = new Label("Cell TD",new Label.LabelStyle(new BitmapFont(Gdx.files.internal("data/CellTDFont.fnt"),false) ,new Color(1.0f,1.0f,1.0f,1.0f)));
    Title.setText("Cell TD");
    Title.setSize(1.0f, SCREEN_H/SCREEN_W);
    Title.setOrigin(Title.getWidth()/2, Title.getHeight()/2);
    Title.setPosition(0, 0);

    s = new Sprite(Rm.GetTexture("Cell.png"));
    s.setSize(1.0f, SCREEN_H/SCREEN_W);
    s.setOrigin(s.getWidth()/2, s.getHeight()/2);
    s.setPosition(-0.5f, -SCREEN_H/SCREEN_W/2);
}
@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0, 0.9f, 0.9f, 0);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    //Title.draw(batch,1);
    s.draw(batch);

    batch.end();

}

@Override
public void resize(int width, int height) {
    // TODO Auto-generated method stub

}

@Override
public void show() {
    // TODO Auto-generated method stub

}

@Override
public void hide() {
    // TODO Auto-generated method stub

}

@Override
public void pause() {
    // TODO Auto-generated method stub

}

@Override
public void resume() {
    // TODO Auto-generated method stub

}

@Override
public void dispose() {
    // TODO Auto-generated method stub

}

}

共有1个答案

邵畅
2023-03-14

这是一个简单的错误<我想你的照相机不对。

c = new OrthographicCamera(1.0f,h/w); 

这意味着相机是1px宽度和h/w高度...例如,你的精灵就像100x200。所以你唯一会看到的是大约1px的精灵。

将它的构造函数更改为类似这样的内容:

float w = Gdx.graphics.getWidth(); //the width of the window
float h = Gdx.graphics.getHeight();//the height of the window

camera = new OrthographicCamera(w, h);

别忘了调整相机内部的大小。

也许可以在这里看看新的libgdx wiki:

  1. 正交照相机
 类似资料:
  • 我有一个问题,我认为它与屏幕渲染及其生命周期有关。基本上我有两个屏幕(菜单和游戏)。在GameScreen渲染方法中,我称之为World。更新,然后我的渲染。在(GameScreen的)隐藏方法中,我从Redner类中处理SpriteBatch。 因此,当我将屏幕从游戏更改为菜单(intheworld.update)时,Java崩溃。据我所知,飞机失事了。所以我的问题是,当我在渲染周期中间设置一个

  • 我有一个大学项目,用LibGDX制作关于粉碎游戏的游戏,我做了这个项目,当玩家生命为0时,它从游戏屏幕类切换到EndGameScreen类,但是这种情况发生了失败的渲染,我实际上不确定这是否是因为setScreen方法或我的EndGameScreen类是不正确的 游戏屏幕类 EndGameScreen类 }

  • 多亏了我在这个论坛上解决其他问题的帮助,我成功地推进了我的项目,但另一个障碍出现在我的道路上。 我有麻烦在libgdx java实现多个屏幕。我想知道如何实现多个屏幕(一个用于主菜单,一个用于播放,一个用于加载屏幕,...)。 关于我应该如何构造我的屏幕类的一个例子或一些解释将非常有帮助。我试着实现我自己的屏幕管理器,但不太顺利...还有一些关于我应该如何处理屏幕的提示,因为每次从主菜单到播放或选

  • 我正在重温LibGDX游戏编程,不幸的是,我不得不重新学习我以前知道的东西。 我目前正在使用平铺地图编辑器制作一个非常简单的大金刚风格关卡。我总共有大约20个矩形。 我在我的主要游戏屏幕类中创建了一个box2d世界,并有一个for循环来将矩形对象放入世界和调试器。 我的问题是,只有我绘制的底部(和第一个)矩形出现。我已经检查了比例,还放了一个println(),它告诉我已经解析了对象信息,所有的矩

  • 我正试图通过使用在中显示一个带有QT的Coin3D/Open Inventor场景,我需要帮助将其转换为 到目前为止,我尝试的是将场景渲染到中,并获得如下缓冲区: 然后从缓冲区数据创建一个: 这是正确的方法吗? 正如在这个关于绘制图像的问题中所描述的,如果源是一张图片,我就能够绘制它。 e:为了确保我的缓冲区实际上包含一个场景,我将缓冲区内容写入两个文件。例如,您可以使用Irfan View及其插

  • 在libGDX中切换屏幕似乎有问题。它会切换到游戏屏幕,但不会切换回主屏幕,也不会切换到屏幕上的游戏。我的游戏课: 我的GameScreen类(实现屏幕): 这就是我如何更改屏幕(不工作): 你可以在这里找到全部来源。