在libgdx中抽签背景中移动的大量粒子(圆)的最佳方法是什么?在后台运行的200个粒子是我可以从我的应用程序中得到的。上面的任何东西都会让我的应用结巴。我实际测试了一个应用程序,它可以在后台运行多达200000个粒子,而不需要牺牲FPS。这是我的游戏课简而言之:
public Array<Particles> particlesArray;
SpriteBatch batch;
OrthographicCamera camera;
Texture sParticlesTexture;
public void create(){
camera = new OrthographicCamera();
camera.setToOrtho(false, 1080, 1920);
batch = new SpriteBatch;
Pixmap pixmap = new Pixmap(Particles.MAX_PARTICLE_RADIUS*2, Particles.MAX_PARTICLE_RADIUS*2, Pixmap.Format.RGBA4444);
pixmap.setColor(Color.WHITE);
pixmap.fillCircle(pixmap.getWidth() / 2, pixmap.getHeight() / 2, Particles.MAX_PARTICLE_RADIUS);
sParticlesTexture = new Texture(pixmap);
pixmap.dispose();
size = random(2, Particles.MAX_PARTICLE_RADIUS+1);
for(int i=0; i<200; i++){
particlesArray.add(new Particles(random(size, width-size),
random(0, height),
0,
random(0.15f*height, 0.25f*height)*0.15f*size,
size));
}
public void render(float deltaTime){
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
//update camera and draw in camera
camera.update();
batch.setProjectionMatrix(camera.combined);
batch.begin();
drawFallingObjects(particlesArray, batch);
batch.end()
moveParticles(particlesArray, deltaTime);
}
public <T extends Objects> void drawFallingObjects(Array<T> objects, SpriteBatch batch){
for(T item: objects){
item.draw(batch);
}
}
public void moveParticles(Array<Particles> particlesArray, float deltaTime){
for(Particles item: particlesArray){
size = random(2, Particles.MAX_PARTICLE_RADIUS+1);
item.move(deltaTime);
//creating particles if out of scale
if(item.y+item.mDiameter<0){
item.x = random(size, width-size);
item.y = height+20;
item.vy = random(0.15f*height, 0.25f*height)*0.15f*size;
item.mDiameter = size;
}
}
}
import com....sParticlesTexture;
public class Particles{
public static int MAX_PARTICLE_RADIUS = 4;
public Particles(float x, float y, float vx, float vy, float mDiameter){
super(x, y, vx, vy, mDiameter);
radius = mDiameter/2;
}
@Override
public void draw(SpriteBatch batch){
batch.draw(sParticlesTexture, x-radius, y-radius, mDiameter, mDiameter);
}
@Override
public void move(float deltaTime){
y -= ceil(vy*deltaTime);
x += ceil(vx*deltaTime);
}
public void dispose() {
sParticlesTexture.dispose();
}
首先,看看粒子效应,它更有效。https://github.com/libgdx/libgdx/wiki/2d-ParticleEffects
如果您不是在尝试获得那种效果,并且希望使用大量的粒子,那么您可能不希望在Java中执行如此大量的计算。而是使用NDK并从C/C++中计算值。
问题内容: 在我的游戏中,我使用 因此,当我绘制粒子时,它们占据了整个屏幕并且很大!那么如何缩小它们以满足我的需求? //皮尤实验室 问题答案: 您要么使用粒子编辑器(说实话,我认为这不是调整粒子大小的好主意,因为您提到粒子不会变得太小(对于其他任何我真的推荐的东西)),或者只是打开粒子效果文件。它应该由编辑器生成,或者您可以从示例中复制它。在此文件中搜索以下字段: 根据需要调整和。
问题内容: 谁能给我一个很好的例子,说明在libGDX中从哪里开始制作粒子系统?我已经看过libGDX源代码中的测试示例,但是仍然很难理解。也许对此做个很好的解释会有所帮助。我想我想用很多五颜六色的粒子进行某种爆炸。任何帮助是极大的赞赏! 问题答案: 在游戏类中定义粒子效果: 初始化它: 在您的方法中,将其放置在要发射粒子的位置(爆炸位置): 最后绘制(也在内): 就这样,非常简单明了。 另一件事
我想把它集成到libgdx中。Liquidfun看起来不错,但我听说它给可移植性带来了问题,而且不能很好地与桌面应用程序配合使用。根据我的理解,libgdx中的粒子效应并不遵循粒子所涉及的物理,所以我认为我也不应该走那条路。
我对LibGDX和OpenGL相当陌生,但我设法使用Box2D api做了一个简单的液体模拟。看到这个链接(这是别人的动画): 物理液体
我就开门见山了。所以我在做这个游戏,你应该用你的咒语杀死其他物体。我创造了子弹和它们的身体。我们都很好。它正在工作。但我想让它看起来特别和“神奇”,所以我决定使用粒子。我制作了粒子,把它们放在子弹体后面,用下面的代码: 但当我发射多发子弹时,问题是粒子刚刚从我发射的所有第一发子弹中消失,并且只出现在最后一发子弹上。有人能给我介绍一下这个吗? -----------------编辑---------
本节暂未进行完全的重写,错误可能会很多。如果可能的话,请对照原文进行阅读。如果有报告本节的错误,将会延迟至重写之后进行处理。 一个微粒,从OpenGL的角度看就是一个总是面向摄像机方向且(通常)包含一个大部分区域是透明的纹理的小四边形.一个微粒本身主要就是一个精灵(sprite),前面我们已经早就使用过了,但是当你把成千上万个这些微粒放在一起的时候,就可以创造出令人疯狂的效果. 当处理这些微粒的时