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);
   }
}

在我的 Assets 类中,我有这段代码可以在纹理图集中找到该区域:

     public class AssetLevelDecoration {
         public final AtlasRegion background;

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

4 回答 4

1

I progressed in solving my problem. I use the setWrap method to repeat my texture :

   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()       
            );

   }
}

Now, I obtain this, but I just want to repeat my background image (wood square).

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

The problem is that the getTexture() recover the all image and not only my background. How can I fix this?

于 2013-11-13T08:04:34.847 回答
1

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

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

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

于 2014-07-21T16:54:46.493 回答
0

我在这里创建了包含重复纹理的图像介绍:https ://libgdx.info/basic_image/

我希望它有帮助

这会沿着这条线创建一个图像: 在此处输入图像描述

于 2016-12-29T22:45:22.203 回答
-1

一个更简单的方法是

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

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

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

于 2013-11-11T13:11:43.530 回答