0

LibGDX Tutorial 3: Đồ họa trong libGDX phần 2 - Sử dụng Animation

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:

animation.PNG

Đ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

Viblo
Let's register a Viblo Account to get more interesting posts.