2012-03-05 4 views
0

Я хочу создать систему частиц в libgdx. Я знаю, что в libgdx есть классы частиц, но я хочу создать его на себе. Система частиц - это снег. Я пишу класс за один снег, чтобы упасть с вершины на землю, так, как он перемещается влево и вправо (так мало). Это мой класс:система частиц в libGdx

public class Particle implements ApplicationListener{ 
SpriteBatch batch; 
Texture texture; 
Random rand = new Random(); 
float randX = rand.nextFloat() * 480; 
float randY = 322; 
Pixmap circle; 

boolean gravity = true; 
Vector2 Vgravity; 
Vector2 position; 
float snowMovement; 
int j = 1; 

@Override 
public void create() { 
    if (randX < 10) { 
     randX = 10; 
    }else if (randX > 460) { 
     randX = 460; 
    } 

    batch = new SpriteBatch(); 
    circle = new Pixmap(4, 4, Pixmap.Format.RGB888); 
    texture = new Texture(circle); 

    circle.setColor(Color.WHITE); 
    circle.fillCircle(4/2, 4/2, 4/2); 
    texture.draw(circle, 0, 0); 
    texture.bind(); 

    position = new Vector2(randX, randY); 

    //setGravity(gravity, new Vector2(0, -20)); 
} 

public void setGravity(boolean gravity, Vector2 Vgravity){ 
    this.Vgravity = Vgravity; 
    snowMovement = 60; 
} 

@Override 
public void dispose() { 
    /* 
    texture.dispose(); 
    circle.dispose(); 
    batch.dispose(); 
    */ 
} 

@Override 
public void pause() { 
    // TODO Auto-generated method stub 

} 

@Override 
public void render() { 
    float deltaTime = Gdx.graphics.getDeltaTime(); 

    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
    batch.begin(); 
    batch.draw(texture, position.x, position.y); 
    batch.end(); 

    if (gravity) { 
     position.y += Vgravity.y * deltaTime; 
     position.x += snowMovement * j * deltaTime; 
     j *= -1; 
    } 
} 

@Override 
public void resize(int arg0, int arg1) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void resume() { 
    // TODO Auto-generated method stub 

} 
} 

Теперь я хочу, чтобы создать класс для вызова «Частица» класс, например, 100 раз. Но ... я не знаю, кого я должен назвать. Я использую этот код, но, когда я его запускаю, он просто показывает один снег. В другом слове вторая частица не читается.

public class Emitter extends Particle{ 
Particle part = new Particle(); 
Particle part2 = new Particle(); 
Array<Particle> particle = new Array<Particle>(); 
public void create(){ 
    part.create(); 
    part.setGravity(true, new Vector2(0, -20)); 
    part2.create(); 
    part2.setGravity(true, new Vector2(0, -20)); 
    particle.add(part); 
    particle.add(part2); 
} 
public void render(){ 
    for (int i = 0; i < particle.size; i++) { 
     Particle num = particle.get(i); 
     num.render(); 

    } 
} 
} 

«этот класс только для примера ...»

Я не знаю, где я должен назвать это или есть мои «частица» проблемы класса или ...
плз помощи.

ответ

0

О, прошу прощения, но в коде есть что-то общее.

public class Particle implements ApplicationListener { ... } 

Это ваш основной игровой класс, а не частица. Итак, вместо этого возьмите всю свою логику для частиц и излучателей из этого класса. Внутри этого класса вы создаете объект Emitter, который, в свою очередь, создаст много объектов Частицы.

Чтобы дать Вам схему:

public class MyGame implements ApplicationListener { 
    // In here you create an Emitter object and call it's update and 
    // render logic (within the render() method). 
} 
public class Emitter { 
    // In here you define the particles that this emitter contains, ... 
} 
public class Particle { 
    // In here you define the particle itself, it's movement logic, if you want 
    // render logic, ... 
} 

Что вы делали в вашем коде расширялся основной класс приложения (ApplicationListener), а затем пытается создать экземпляр это 2 раза, но, конечно, вы можете отображать только одно приложение вовремя.

+0

tnx для этого пункта. но его по-прежнему показывают один снег. на этот раз я использую этот метод. класс частиц по-прежнему как старый, в эмиттере я определяю функцию 2, create() и render(). в создании определяют объект с двумя частицами и вызывают их визуализацию в render(). в основном классе, просто определите излучатель и визуализируйте его. но это не работает. – Hosein

+0

Звучит неплохо от структуры, некоторые моменты я мог бы подумать, почему он не работает: они находятся в точно таком же месте (убедитесь, что положение частицы определено в классе частиц, и вы обновляете его там), или вы не итерируете через все ваши частицы. – dom

Смежные вопросы