LibGDX Tutorial 3: Đồ họa trong libGDX phần 2 - Sử dụng Animation
Trở lại Tutorial 2, tôi đã tạo một hoạt cảnh bằng cách sử dụng Timer và thay đổi frame thủ công từ một TextureAtlas. Đây không phải là cách làm lý tưởng, thay vào đó cách tốt hơn để tạo ra hoạt cảnh trong LibGDX là sử dụng Animation class. Dưới đây là một ví dụ sử dụng cùng một spritesheet được ...
Trở lại Tutorial 2, tôi đã tạo một hoạt cảnh bằng cách sử dụng Timer và thay đổi frame thủ công từ một TextureAtlas. Đây không phải là cách làm lý tưởng, thay vào đó cách tốt hơn để tạo ra hoạt cảnh trong LibGDX là sử dụng Animation class. Dưới đây là một ví dụ sử dụng cùng một spritesheet được hướng dẫn tạo ở Tutorial 2 nhưng sử dụng Animation, bạn hãy nhớ rằng bạn cần phải thêm nó vào thư mục assets trong android project.
package com.thinhhung.basicgraphic; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.g2d.Animation; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureAtlas; public class BasicGraphic implements ApplicationListener { private SpriteBatch batch; private TextureAtlas textureAtlas; private Animation animation; private float elapsedTime = 0; @Override public void create () { batch = new SpriteBatch(); textureAtlas = new TextureAtlas((Gdx.files.internal("spritesheet.atlas"))); animation = new Animation(1/5.0f, textureAtlas.getRegions()); } @Override public void render () { Gdx.gl.glClearColor(1, 1, 1, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.begin(); elapsedTime += Gdx.graphics.getDeltaTime(); batch.draw(animation.getKeyFrame(elapsedTime, true), 0, 0); batch.end(); } @Override public void dispose() { batch.dispose(); textureAtlas.dispose(); } @Override public void resize(int awidth, int height) { } @Override public void pause() { } @Override public void resume() { } }
Sau khi chạy ứng dụng chúng ta sẽ thấy được hoạt cảnh đi bộ của nhân vật giống như ở Tutorial 2:
Điều quan trọng ở đây là tạo Animation:
animation = new Animation(1/5.0f, textureAtlas.getRegions());
Khi tạo ra một hoạt cảnh, tham số đầu tiên là thời gian hiển thị của một frame (trong trường hợp này là 5 frame hiển thị trong 1 giây), tham số thứ 2 là một mảng TextureRegions. Trong ví dụ này chúng ta chỉ đơn giản là sử dụng tất cả các frame có sẵn trong Atlas để tạo ra một hoạt cảnh duy nhất. Điều quan trọng tiếp theo là:
elapsedTime += Gdx.graphics.getDeltaTime(); batch.draw(animation.getKeyFrame(elapsedTime, true), 0, 0);
Ở đây chỉ đơn giản là chúng ta vẽ frame hiện tại lên màn hình. Tham số đầu tiên là khoảng thời gian đã trải qua (elapsed time) để animation biết frame nào sẽ được xuất hiện trong khoảng thời gian đó. Tham số thứ hai là true cho phép hoạt cảnh được lặp lại.
Bạn có có thể tham khảo source code của project này tại đây.