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

为什么SpriteBatch没有绘制任何东西(LibGdx)?

许博达
2023-03-14

本文摘自flappy bird娱乐教程的第6天--http://www.kilobolt.com/day-6-adding-graphics---welcome-to-the-necropolis.html

这是我在游戏中使用的纹理图像文件。它是一个256px64px.png文件。

这里是我用来加载纹理的类,以及我希望SpriteBatch绘制的特定的TextureRegion(纹理的一部分)。

    public class AssetLoader {
          public static Texture texture;
          public static TextureRegion bg;

          public static void load() {
                  texture = new Texture(Gdx.files.internal("data/texture.png"));
                  bg = new TextureRegion(texture, 0, 0, 136, 43);
          }

   }
      And I call AssertLoader.load(), along with setting up game screen from
     public class MyGdxGame extends Game{
          @Override
         public void create() {
                  AssetLoader.load();
                 setScreen(new GameScreen());
         }
      }

      And inside GameScreen.java
      public class GameScreen implements Screen {
           //delegate render task
           private GameRenderer renderer;
          public GameScreen() {
               float screenHeight = Gdx.graphics.getHeight();
               float screenWidth = Gdx.graphics.getWidth();
               float gameWidth = 136;
               float gameHeight = screenHeight / (screenWidth / gameWidth);
               renderer = new GameRenderer((int)gameHeight);
           }
       }
      And inside GameRederer, the class I delegate to render the game
      public class GameRenderer {
            private int gameHeight;
            private SpriteBatch batch;
            private OrthographicCamera cam;
            public GameRenderer(int gameHeight) {
                   this.gameHeight = gameHeight;
                  cam = new OrthographicCamera();
                   batch = new SpriteBatch();
                   batch.setProjectionMatrix(cam.combined);
                    cam.setToOrtho(true, 136, gameHeight);
            }
             public void render() {
                  Gdx.gl.glClearColor(0, 0, 0, 1);
                  Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
                  batch.begin();
                  batch.disableBlending();
                  batch.draw(AssetLoader.bg, 0, (gameHeight/2) + 23, 136, 43);
                  batch.end()
             }
        }

当我运行桌面版本的游戏时,我得到的是上图所示的黑屏(黑色是因为我用这些代码行将背景设置为黑色

  Gdx.gl.glClearColor(0, 0, 0, 1);
  Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

有没有人知道为什么SpritchBatch的图纸没有出现?我用这行代码提取了我想要的纹理的纹理部分(从0,0,宽136,高43开始)-使用GIMP-找出要剪切的部分。

  bg = new TextureRegion(texture, 0, 0, 136, 43);

我还放了几个log语句(从视图中删除它们),以确保在绘制之前,BG的宽度和高度设置正确,它们是。问题不是游戏高度,因为我使用了一个print语句,并发现为204,这意味着这个表达式,(gameheight/2)+23将计算为125,这在0和游戏高度之间。

我也检查了其他的线程。我的问题不能是libgdx spritebatch没有呈现纹理,因为spritebatch应该覆盖背景。而且不能是libgdx:Android SpriteBatch不绘图,因为我是在桌面上运行我的,而不是Andorid。

共有1个答案

潘辰龙
2023-03-14

可能是您必须首先在批处理之前放置CAM.SetToOrtho(true,136,gameHeight);,所以我无法确认是否有帮助

 public GameRenderer(int gameHeight) {
                   this.gameHeight = gameHeight;
                  cam = new OrthographicCamera();
                   batch = new SpriteBatch();
                   cam.setToOrtho(true, 136, gameHeight);
                   batch.setProjectionMatrix(cam.combined);

            }
 类似资料:
  • 所以我超级兴奋,我终于想出了这个程序,然后砰的一声启动它=空白屏幕。我在这里调用一个空白窗格,而其他信息没有填充吗?它是在屏幕外填充的吗?出于某种原因,JavaFX真的让我动心了。如果有人也有什么好的地方去读它。(我知道谷歌很管用,我找到的很多网站/地方都不适合我。

  • 您好,我目前正在处理HackerRank上的Java挑战,遇到了一个用我的代码无法解决的问题。 提示如下:, 给定一个字符串 s 和一个整数 k,完成该函数,以便它找到字典上长度 k 的最小和最大子字符串。 样本输入: welcometojava 3 示例输出: ava wel 最小和最大的子字符串仅基于第一个整数。因此,对于我的解决方案,我决定创建一个整数数组,并使用 String s 中每个可

  • 我试图用libGdx和MVC模式制作一个游戏。我有一个我的游戏模型,我打算一直运行,而不是我的渲染方法从应用程序。因此,我在从libgdx扩展Game的类中做了这样的工作:首先,我将连续呈现设置为false,为了调用呈现方法,我使用gamescreen作为模型的监听器。

  • 我正试图装配一个KafkaStorm“你好世界”系统。我有Kafka安装和运行,当我发送数据与Kafka生产者我可以读取它与Kafka控制台消费者。 我从O'Reilly的《Storm入门》一书中选取了第二章的例子,并将其修改为使用Kafka斯库特(KafkaSpout)而不是普通的喷口。 当我运行应用程序时,kafka中的数据已经挂起,KafkaSpout的下一个线程不会收到任何消息——它进入,

  • 总之,我的全屏着色器没有输出任何东西, 在环境传递中的每个片段输出相同的颜色,以确保它是输出的。(作品) 在定向光路中的每个片段输出相同的颜色。(仍然一无所获) 将屏幕分辨率用于XY顶点坐标,而不是归一化坐标; 这适用于环境传递,因为我可以看到结果如预期的那样变化。 方向光通过时没有变化,我得到的输出也是一样的。 这是申请代码; 请原谅,如果我的数学是错误的,我一直在乱搞着色器,试图得到任何类型的

  • 我用node.js通过npm安装一些东西,没有任何问题。现在我没有改变我的设置(Win8;没有代理,互联网是工作),我不能安装任何东西(特别是科尔多瓦和离子)。它只会抛出错误,比如我在代理后面,但我不是。 和 有人能帮帮我吗? 编辑:尝试降级到节点0.10以管理员身份运行cmd,但仍不起作用: