我跟随this tutorial在LibGDX
建立了一个简单的游戏。游戏的基本思想是:有下降的水滴,玩家应该将水桶拖到水滴落下的地方。“
在原始版本中,所有的水滴都是从一个水滴图像创建的,我尝试做的是下雨不同的水滴(不同的水滴图像),所以我创建了一个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
答案 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()