Lập trình game với libGDX - Chạy thử và tìm hiểu cấu trúc Project

Chào mừng các bạn đã quay trở lại với blog :).
Tiếp tục bài hôm trước bây giờ chúng ta sẽ cùng nhau đi tìm hiểu project mà hôm qua chúng ta đã tạo nha.
Và trước khi cùng nhau tìm hiểu thì ta sẽ chạy thử các project xem nó ra ngô ra khoai gì đã ha :D.

Bài hôm nay sẽ gồm một số ý:
  • Imrport project vào eclipse và chạy thử.
  • Tìm hiểu cấu trúc của các project
Ok, chúng ta bắt đầu nhé.



I, Import project vào eclipse và chạy thử:
1, Import project vào eclipse:

Để import các project này vào eclipse các bạn làm như sau:

+ Đầu tiê, bạn vào File/Import, hoặc tại cửa số Package Explorer  bấm chuột phải chọ Import, sau khi chọn thì cửa sổ Import hiện lên như sau:

 Các bạn chọn Existing Project into Workspace, cửa số tiếp theo hiện lên như sau:


Các bạn tiếp tục chọn Browse..., sau khi chọn thì bạn tìm đến thư mục mà các bạn đã tạo các Project thì sẽ được kết quả như sau:

Ví dụ của mình lưu ở đường dẫn: /mnt/Learn/libgdx-1.6.1/Project/LearnlibGDX.
Các bạn thấy sẽ có tất cả 3 project bao gồm:

  • Project android
  • Project core
  • Project desktop
Lưu ý: nếu lúc lựa chọn khi tạo Project bạn chọn iOS hay html thì nó sẽ có thêm các project này vào cho các bạn, bạn nào lỡ tạo mà không muốn import vào thì bỏ tick nha và lưu ý quan trọng là bạn phải import project core vào, vì mình sẽ viết code ở project này.
Bây giờ chúng ta chưa vôi quan tâm đến nó, chạy thử xem như nào đã ha :))

2, Chạy thử các project:

Để chạy thử thì ta sẽ Bấm chuột phải vào project cần chạy (ở đây có 2 project để chạy là android và desktop)

+ Để chạy project dành cho desktop bạn bấm chuột phải vào project desktop -> Run As -> Java Application, sẽ xuất hiện của sổ hỏi bạn chọn file main để thực thi:

Các bạn chọn DesktopLauncher rồi bấm ok. Kết quả thu được như sau:

Rất đơn giản đúng không các bạn :D.

Vậy bây giờ làm sao để chạy project android? Để chạy được project android bạn cần cài đặt một máy ảo (Bạn có thể dùng AVD hoặc Genymotion cũng được), hoặc nếu bạn có máy thật cắm vào chạy thì càng tốt.
À mà mình chắc là giờ project android cảu bạn đang báo lỗi đúng không?
Lỗi này là do ta chưa chọn phiên bản android để build. Để khắc phục các bạn làm như sau:
+ Chuột phải vào project android -> Properties, sẽ xuất hiện của sổ như sau:

+ Các bạn chọn mục Android và chọn một trong các phiên bản ở Project Build Target và bấm OK để hoàn tất.

Xong, giờ muốn chạy thì bạn làm tương tự như chạy project desktop:
+ Bấm chuột phải vào project android -> Run As -> Android Application, Android Emulator mặc định sẽ được bật lên.
+ Nếu báo lỗi thì bạn có thể Run Configurations -> Target, sau đó chọn như hình
Bây giờ bạn có thể chạy bằng máy ảo Genymotion hoặc chọn thiết bị thật đã được kết nối qua USB.

Hiện tại chúng ta chỉ cần test với project destop đã, cái android sau này làm game hoàn chỉnh ta sẽ tính sau ha.

II, Tìm hiểu cấu trúc project:

Thì như các bạn đã thấy, chúng ta có 3 project:
Bây chúng chúng ta sẽ tìm hiểu nha:
* Project core: đây là project chính, game của chúng ta hầu hết sẽ được code ở project này bằng java, các project còn lại khi chạy sẽ lấy code ở core, và đây là cái hay của libGDX: các thư viện trong các project android. desktop sẽ "dịch" code từ core ra để chạy. Bạn xem thử code file chứa trong project desktop xem như nào nhé:

package com.gameiter.hoclibgdx;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class LearningliGDX extends ApplicationAdapter {
 SpriteBatch batch;
 Texture img;
 
 @Override
 public void create () {
  batch = new SpriteBatch();
  img = new Texture("badlogic.jpg");
 }

 @Override
 public void render () {
  Gdx.gl.glClearColor(1, 0, 0, 1);
  Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
  batch.begin();
  batch.draw(img, 0, 0);
  batch.end();
 }
}

Ở các phiên bản libGDX cũ thì nó class LearninglibGDX sẽ được implements ApplicationListener, đây là một interface quan trọng, nó được coi là gốc của tất cả các game mà ta viết, nó thể Life cycle của chúng ta.
Thực ra class ApplicationAdapter nó cũng implements thằng ApplicationListener nên bạn viết kiểu nào cũng được.

Chúng ta cùng xem qua interface ApplicationListener xem nó có những gì nhé:


public abstract class ApplicationAdapter implements ApplicationListener {
 @Override
 public void create () {
 }

 @Override
 public void resize (int width, int height) {
 }

 @Override
 public void render () {
 }

 @Override
 public void pause () {
 }

 @Override
 public void resume () {
 }

 @Override
 public void dispose () {
 }
}

Nói sơ qua về các phương thức:
+ create(): sẽ được gọi khi game của chúng ta bắt đầu.
+ resize(int width, int height): phương thức được gọi khi chúng ta thay đổi kích thức màn hình (phóng to, thu nhỏ, vv).
+ render(): đơn giản là vẽ.
+ pasuse(): gọi khi game tạm dừng.
+ resume(): gọi khi game tiếp tục (Sau khi pause() được gọi).
+ dispose(): giúp giải phóng tài nguyên, gọi khi game kết thúc,

Dưới đây là Life cycle (hiểu đơn giản là vòng lặp như mình đã nói ở series lập trình game java cơ bản trước), ảnh mình lấy từ wiki trên github nhé:


Nhìn qua chúng ta cũng phần nào hiểu đước cách thức game vận hành ha :D.

* Còn hai cái project android với desktop kia, có gì trong đó?
Chúng ta cùng xem project desktop nhé, trong này sẽ có file DesktopLauncher, file này đơn giản chỉ là cấu hình để chạy trên desktop các bạn ạ.

import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.gameiter.hoclibgdx.LearningliGDXb;

public class DesktopLauncher {
 public static void main (String[] arg) {
  LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
  new LwjglApplication(new LearningliGDXb(), config);
 }
}

Nó chỉ cần vậy là chạy được rồi, vì mọi xử lý đã nằm ở lớp core, việc còn lại của các project kia đơn giản chỉ là cấu hình để chạy.

Mẹo: vì libGDX là open source nên các bạn thoải mái xem code các class nếu tò mò xem nó có gì, để làm điều này trên eclipse nhanh chóng, các bạn giữ Ctrl + chuột trái vào class cần xem nhé.

Còn đây là file AndroidLauncher trong project android, nó cũng chỉ là vài dòng code cấu hình thôi:

import android.os.Bundle;

import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.gameiter.hoclibgdx.LearningliGDXb;

public class AndroidLauncher extends AndroidApplication {
 @Override
 protected void onCreate (Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
  initialize(new LearningliGDXb(), config);
 }
}

À ngoài ra có một điều khá hay trong libGDX, đó là tất cả tài nguồn có trong game (ví dụ là âm thanh, hình ảnh, vv, ...) ta sẽ lưu vào thư mục assets, và thú vị ở chỗ là ta chỉ cần lưu vào thư mục project assets của android thì lập tức ở thư mục assets của desktop cũng sẽ tự động được cập nhật theo.

Các bạn xem hình sau sẽ rõ hơn (hình mình lấy trong Cuốn Learning LibGDX Game Development, 2nd Edition, các bạn có thể vào mục Sách hay của blog để down bản pdf nhé).


Bài hôm nay vậy mình thấy viết khá nhiều rồi, chúng cũng đã hiểu được phần nào cấu trúc project và life cycle rồi.

Bài hôm sau mình sẽ hướng dẫn các bạn vẽ hình nha. Hẹn gặp lại, các ơm các bạn đã quan tâm đọc bài :D.
SHARE

Xuho

  • Image
  • Image
  • Image
  • Image
  • Image

0 comments:

Post a Comment