libgdx 背景 TextureRegion 重复

3
我是一名新手,正在学习libdgx开发和游戏开发。我正在阅读Andreas Oehlke的《Learning Libgdx Game Development》这本书,并尝试并行开发自己的游戏。 当我尝试添加背景时,遇到了问题。在书中,他使用颜色,所以很简单。但我想从纹理图集中添加一幅图像。该图像太小以至于无法覆盖整个屏幕,因此我想要重复它。我不能使用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);
   }
}

在我的资产类中,我有以下代码来查找纹理图集中的区域:
     public class AssetLevelDecoration {
         public final AtlasRegion background;

         public AssetLevelDecoration (TextureAtlas atlas) {
             background = atlas.findRegion("background");
      }
   }
4个回答

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
我只想添加一条评论,但我没有声望。
为了解决整个纹理重复而不仅仅是木质正方形的问题,您有两个选择。A)将纹理区域分离到单独的纹理中。B)循环重复绘制,这在性能方面应该可以忽略不计。

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


-1

一个更简单的方法是

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

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

最重要的是,这可能会导致图像拉伸(取决于图像)。


请您能否更具体一些。 - lovelace63
batch.draw(reg.getTexture(),0,0,480,800);//假设你的相机高度为800,宽度为480//关于我的回答中哪一部分需要说明,请告诉我。 - Kumar Saurabh
1
你的代码给了我一个黑屏。 如果我不使用reg.getRegionX(),reg.getRegionY(),reg.getRegionWidth()和reg.getRegionHeight(),就不会显示任何图像。我不想拉伸我的图像,我想重复它。我认为我需要使用TiledDrawable,但我不知道如何使用它。 - lovelace63
你也可以使用for循环来绘制。 - Kumar Saurabh
你正在绘制一个需要边界和其他材料的背景或对象。 - Kumar Saurabh
显示剩余3条评论

-1

我已经创建了一个关于图像的介绍,包括重复纹理,链接在这里:https://libgdx.info/basic_image/

希望它能有所帮助。

这将创建一条沿着这条线的图像: 输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接