libgdx背景TextureRegion重复

时间:2013-11-11 11:22:44

标签: java android libgdx

我是libdgx开发的新手,也是游戏开发的新手。我正在阅读Andreas Oehlke撰写的“学习Libgdx游戏开发”一书,我正在努力开发自己的游戏。 我尝试添加背景时遇到问题。在书中,他使用了一种颜色,所以它非常简单。但我想从纹理图集中添加图像。图像很小,可以恢复所有屏幕,所以我想重复一遍。我不能使用regBackground.setWrap(TextureWrap.Repeat,TextureWrap.Repeat)因为regBackground不是纹理。我怎样才能正确解决问题?

   public class Background extends AbstractGameObject {

   private TextureRegion regBackground;

   public Background () {
      init();
   }

   private void init () {
      dimension.set(1f, 1f);
      regBackground = Assets.instance.levelDecoration.background;
   }

   public void render (SpriteBatch batch) {
      TextureRegion reg = null;
      reg = regBackground;
      batch.draw(reg.getTexture(), 
            position.x, position.y, 
            origin.x, origin.y, 
            dimension.x, dimension.y, 
            scale.x, scale.y,
            rotation, 
            reg.getRegionX(), reg.getRegionY(), 
            reg.getRegionWidth(), reg.getRegionHeight(), 
            false, false);
   }
}

在我的Assets类中,我有这个代码来查找纹理图集中的区域:

     public class AssetLevelDecoration {
         public final AtlasRegion background;

         public AssetLevelDecoration (TextureAtlas atlas) {
             background = atlas.findRegion("background");
      }
   }

4 个答案:

答案 0 :(得分:1)

我在解决问题方面取得了进展。我使用setWrap方法重复我的纹理:

   public class Background extends AbstractGameObject {

   private TextureRegion regBackground;

   public Background (int width, int heigth) {
      init(width, heigth);
   }

   private void init (int width, int heigth) {
      dimension.set(width, heigth);
      regBackground = Assets.instance.levelDecoration.background;

      origin.x = -dimension.x/2;
      origin.y = -dimension.y/2;
   }

   public void render (SpriteBatch batch) {
      TextureRegion reg = null;
      reg = regBackground;

      Texture test = reg.getTexture();
      test.setWrap(TextureWrap.Repeat, TextureWrap.Repeat);
      batch.draw(test, 
            position.x + origin.x, position.y + origin.y, 
            test.getWidth(), test.getHeight(), 
            reg.getRegionX(), reg.getRegionY(), 
            reg.getRegionWidth(), reg.getRegionHeight()       
            );

   }
}

现在,我得到了这个,但我只想重复我的背景图片(木方块)。

http://s24.postimg.org/c1m92ffwx/Capture_du_2013_11_12_15_49_03.jpg

问题是getTexture()恢复了所有图像,而不仅仅是我的背景。我该如何解决这个问题?

答案 1 :(得分:1)

我只想添加评论,但我没有代表。

要解决重复整个纹理的问题,而不仅仅是木制方形,你有两个选择。 A)将textureregion分离到单独的纹理上。 B)循环以重复绘制,这在性能方面应该可以忽略不计。

http://badlogicgames.com/forum/viewtopic.php?f=11&t=8883

答案 2 :(得分:0)

我在这里创建了一个图像介绍,包括重复纹理:https://libgdx.info/basic_image/

我希望它有所帮助

这会沿着这条线创建一个图像: enter image description here

答案 3 :(得分:-1)

更简单的方法是

 batch.draw(imageReference,startX,startY,widthOfScreen,heightOfScreen);

batch.draw()是一个重载方法,所以只使用那些你需要的参数 语法只是一个伪代码

MOst importantlu这可能会使图像拉伸(取决于图像)。