LibGDX Tutorial 3: Đồ họa trong libGDX phần 2 - Sử dụng Animation
Bài đăng này đã không được cập nhật trong 3 năm
Sử dụng Animation class
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 width, 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.
Source code
Bạn có có thể tham khảo source code của project này tại đây.
All rights reserved