Thursday, August 11, 2016

Cấu Trúc Chương Trình Libgdx


   Chào các bạn, đây là bài viết của mình về cấu trúc một chương trình trong libgdx


   Hôm nay mình tính viết về screen trong libgdx nhưng sau một hồi xem lại bài actor (tiếp theo) mình quyết định hẹn bài Screen vào một hôm nào khác còn bây giờ điều quan trọng hiện tại là giới thiệu cho các bạn về cấu trúc của một chương trình libgx hay cấu trúc một game khi lập trình với libgdx. Vậy thì bắt đầu thôi nào!

   Cấu trúc của một chương trình libgdx khá đơn giản. Sau đây mình sẽ đưa ra một trong những cấu trúc khá phổ biến khi lập trình game mà các nhà làm game hay sử dụng trong đó có cả mình :

                                                      1  MAIN
                                                      2 SCREEN
                                                      3-1 GAME WORLD
                                                      3-2 GAME RENDER
                                                      4 HELPER


   1 MAIN :
    Main chính là phần chính của chương trình bạn. Phần này được nhận biết bằng cách khi mới tạo một project libgdx. Có một mục bắt bạn điền tên lớp, đó chính là lớp chính của chương trình.
Bạn cũng nên nhớ tất cả chương trình chỉ có một lớp main thôi nhé. Vì là lớp chính nên tất cả mọi việc phải thông qua lớp main hay trong hình là Game class này. Do đó, lớp main này thường dùng để thao tác với các lớp khác.






   2 SCREEN :
   Screen là lớp dùng để thao tác với các loại màn hình trong chương trình libgdx. Lớp screen về tầm quan trọng thì chỉ thua mỗi lớp Main thôi và rất dễ để lớp Main thao tác nên các lập trình game thường dùng lớp Main để làm việc với lớp Screen. Thường thường trong một game ít khi nào chỉ có một Screen mà thay vào đó là rất nhiều Screen để làm những chức năng nhất định như GameScreen ( Screen để bạn thao tác với trò chơi của bạn ), MenuScreen ( Screen có những lựa chọn như "play" , "option"... mà bạn thường thấy trong game ),... Các Screen thường được chuyển qua lại nhờ Main.
MenuScreen đơn giản


   3-1 GAME WORLD :
   GameWorld là nơi cho những logic game của bạn. Đó là nơi để bạn xử lý các hành động của nhân vật, các điều kiện. Nơi bạn sử dụng những thuật toán để tạo quỹ đạo cho hành động. Cũng có thể là xử lý các input ( bàn phím, chuột, ...). Game world thường đòi hỏi phải cập nhập thường xuyên nên luôn được gắn liền với screen ( do screen có phương thức để cập nhập theo delta time ( mình có đề cập delta time trong bài actor (tiếp theo) ). Thường thường chỉ cần một lớp GameWorld để xử lý các logic.


   3-2 GAME RENDER :
   Game Render dùng để vẽ các hình ảnh trong game. Do các nhận vật luôn được cập nhập, thay đổi theo thời gian nên game render cũng cần phải cập nhập theo thời gian. Vì thế, game render thường được kết nối tới lớp screen để cập nhập các hình ảnh cùng với các thay đổi của nhân vật trong game. Ngoài ra, game render cần phải vẽ theo các chuyển động, hành động của các nhận vật nên lập trình viên phải gắn liền game world với game render. Nếu không game sẽ không được như ý. Đó là lý do cả 2 Game world và Game render đều ở mục 3. Không có cái nào quan trọng hơn cái nào, bạn phải nhớ luôn gắn liền Game world với Game Render nhé.


   4 HELPER :
   Đây là mục kém quan trọng nhất nhưng mình vẫn đưa ra vì nó giúp cải thiện sự thuận tiện của bận khi lập trình game. Nên gọi helper là một mục đúng hơn là một lớp vì trong helper có thể chia ra thành nhiều lớp. VD : lớp thao tác với các dữ liệu nhập, lớp để chứa các hằng số, lớp để tải hình ảnh,... Nhưng lớp này sẽ giúp bạn nâng cao hiệu năng khi lập trình, làm code của bạn sáng sủa hơn. ví dụ nhé! Thay vì bạn tạo các biến hằng ở từng lớp, nó sẽ khiến bạn rối mắt và khó kiểm soát, bạn có thể gom tất cả hằng vào một lớp rồi lớp nào cần sử dụng thì truy xuất lớp hằng của bạn. Điều đó sẽ giúp bạn rất nhiều :).
                                               





No comments:

Post a Comment