Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Implementing Slow-motion with LibGDX

Tags:

java

libgdx

I am having trouble implementing smooth slow-motion rendering in LibGDX with the Artemis framework. I understand how to change "delta" in order for this to work (using this), but I'm unable to figure out how to actually implement it in the Screen interface's render method. How can I change the delta parameter of the Screen's render method to essentially slow down time?

My Screen Class:

public class GameScreen implements Screen {

    private SpriteRenderSystem spriteRenderSystem;
    private OrthographicCamera camera;
    private Game game;
    private World world;
    private Random r = new Random();

    public GameScreen(Game game){
        camera = new OrthographicCamera();
        camera.setToOrtho(false, 640, 480);
        this.game = game;

        world = new World();
        world.setManager(new GroupManager());

        spriteRenderSystem = world.setSystem(new SpriteRenderSystem(camera), true);
        world.setSystem(new VelocitySystem());
        world.setSystem(new AccelerationSystem());
        world.setSystem(new CollisionSystem());
        world.setSystem(new ExpirationSystem());

        world.initialize();

        for(int i = 0; i < 40; i += 4){
            EntityFactory.createBlock(world, i*16, 0, "tiles/water").addToWorld();
            EntityFactory.createBlock(world, (i+1) * 16, 0, "tiles/grass").addToWorld();
            EntityFactory.createBlock(world, (i+2) * 16, 0, "tiles/mud").addToWorld();
            EntityFactory.createBlock(world, (i+3) * 16, 0, "tiles/sand").addToWorld();
        }

        for(Entity e : EntityFactory.createExplosion(world, 320, 240)){
            e.addToWorld();
        }
    }

    @Override
    public void render(float delta) {
        // NEED HELP HERE
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        camera.update();
        world.setDelta(delta);
        world.process();
        spriteRenderSystem.process();
    }

    (...)
}

Note: I am using the LibGDX + Artemis demo SpriteRenderSystem for rendering entities.

like image 607
Siva Mahadevan Avatar asked Apr 08 '26 06:04

Siva Mahadevan


1 Answers

Have a float:

public float speed = 0.5F; //half for example

And in your render method, just multiply your delta with it:

@Override
public void render(float delta) {

    delta*=speed;  //<---

    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    camera.update();
    world.setDelta(delta);
    world.process();
    spriteRenderSystem.process();
}
like image 91
Lestat Avatar answered Apr 10 '26 16:04

Lestat



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!