在render()中随机更改图像,而不更改所有其他图像

时间:2015-01-09 22:55:01

标签: java android opengl-es libgdx

我跟随this tutorialLibGDX建立了一个简单的游戏。游戏的基本思想是:有下降的水滴,玩家应该将水桶拖到水滴落下的地方。“

在原始版本中,所有的水滴都是从一个水滴图像创建的,我尝试做的是下雨不同的水滴(不同的水滴图像),所以我创建了一个List - {我更换了someDrops Texture {1}} {1}}。

render()

使用:

     batch.draw(dropImage, raindrop.x, raindrop.y); 

我得到的是不同水滴的雨,但是他们不会因为不同的图像而摔倒,但是它们会一下子掉下来,同时一起改变图像。

我如何设置这样每次掉落都会使用来自 int random = MathUtils.random(0, 3; batch.draw(someDrops.get(random), raindrop.x, raindrop.y); 的随机图像,因为它会随机向下移动x,y位置。 另外我想在每个点添加不同的点,我应该在哪里保存它以及选择什么类型的集合?

someDrops

1 个答案:

答案 0 :(得分:0)

在我认为你调用每一帧的render()函数中,绘制所有现有的墨滴,必要时创建一个新的墨滴并递减墨滴的y位置。 出现问题是因为每次想要绘制现有的水滴时都会使用

int random = MathUtils.random(0, 4);

可以给你一个与前一次抽奖不同的图像,即当它处于较高的y位置时。因此当它下降(递减y)时,每次渲染发生时图像都会不断变化,直到它落入存储桶时最终被移除。

要解决此问题,请仅在第一次渲染新的渲染时获取随机图像,稍后保存此图像并在渲染的整个生命周期内使用相同的图像绘制它。保存相应图像的新数组的大小将与雨滴数组保持相同,除非添加了新的雨滴,在这种情况下您将获得新的随机图像。

我将添加一些代码来说明这一点,但我从未在Java中编程或使用libgdx,因此您必须修复此问题以解决编译器错误:)

一开始创建raindropTextures

   private Array<Texture> raindropTextures; // need an ArrayList here?

在create()中添加 -

   raindropTextures = new Array<Texture>();

然后在render()

   // if the sizes aren't equal, a new raindrop must have been added!!
   if(raindrops.size() != raindropTextures.size())  {
     int random = MathUtils.random(0, 4);
     raindropTextures.add(someDrops.get(random));
   }        
   for(Rectangle raindrop: raindrops, Texture texture: raindropTextures) {
        // make sure the textures and raindrops correspond here; theoritically they should
        batch.draw(texture, raindrop.x, raindrop.y); 
   }

最后 -

   Iterator<Rectangle> iter = raindrops.iterator();
   Iterator<Texture> iter2 = raindropTextures.iterator();
   //later
   iter.remove()
   iter2.remove()