Giới thiệu
Component Base Programming (CBP) - 1 khái niệm mà không ít lập trình viên biết đến và mong muốn mình có thể làm chủ được kỹ thuật lập trình này. Chuỗi bài viết này của tôi gồm 10 bài, được đánh dấu bởi tiền tố CBP, hướng dẫn độc giả hiện thực 1 hệ thống Component - Entity.
Đây là kinh nghiệm và là sự tìm tòi, nghiên cứu và thử nghiệm của tôi trong suốt 6 tháng. Thông qua 1 sản phẩm được hiện thực bởi hệ thống này, tôi rút ra được những kinh nghiệm cần thiết và quan trọng, đáng để chia sẻ cho những độc giả quan tâm.
FRED_FRAMEWORK là gì?
Đây là framework đơn giản do tôi tạo ra để làm phần demo hướng dẫn về CBP, làm việc với Win32 với 1 số thao tác cơ bản như tạo cửa sổ, load, vẽ ảnh, truy vấn phím đang nhấn.
Framework này sẽ theo xuyên suốt trong 10 bài viết để giúp độc giả dễ dàng tiếp cận CBP.
FRED_FRAMEWORK gồm những gì?
FKeyboard
Là 1 lớp Singleton, có chức năng quản lý thiết bị nhập của người dùng, với phương thức chính là isKeyDown
, có chức năng kiểm tra phím tương ứng với Virtual Keycode được truyền vào có đang nhấn hay không, return true
nếu phím đang được nhấn.
static bool isKeyDown(int keycode);
Các Keycode khả dụng để truyền vào phương thức này có 1 số quy tắc:
- Hầu hết được khởi đầu với
VK_
. - Nếu là phím thuộc Numpad, tiền tố sẽ là
VK_NUMPAD
. - Nếu là phím ký tự hoặc phím số, keycode sẽ tương ứng với mã ASCII của ký tự viết hoa của ký tự đó (ví dụ:
K
,L
,1
, ...).
FTexture
Lớp định nghĩa 1 texture, hiện tại FTexture
chỉ có thể load ảnh định dạng .bmp, với phương thức chính là draw
, vẽ hình ảnh đã load lên màn hình. Ảnh load là ảnh có đường dẫn trùng với đường dẫn được truyền vào Constructor của FTexture
.
void draw(HDC hdc, int posX = 50, int posY = 50);
FWindows
Là lớp định nghĩa 1 đối tượng cửa sổ Win32, phương thức chính của FWindows
bao gồm Constructor
và run
.
FWindows(HINSTANCE hInst, int nCmdShow, int width, int height, Function_I_float_O_void updateFunc, Function_I_HDC_O_void drawFunc);
hInst
,nCmdShow
: lấy từ đối số truyền vào hàmWinMain
của chương trình.width
,height
: kích thước cửa sổ.updateFunc
: con trỏ hàm kiểuvoid(*)(float)
, là con trỏ đến hàm định nghĩa thao tácupdate
của vòng lặp game, đối sốfloat
của hàm làdeltaTime
- thời gian của vòng lặp trước tính theo giây.drawFunc
: con trỏ hàm kiểuvoid(*)(HDC)
, là con trỏ đến hàm định nghĩa thao tácdraw
của vòng lặp game, đối sốHDC
là Handle của Device Context sử dụng trong lượt vẽ này (tôi yêu cầu đối số này để hiện thựcdouble buffer
).
void run();
Đây là phương thức dùng để khởi động các xử lý cửa sổ game, hay nói nôm na, phương thức này chính là vòng lặp game.
Bài chung series
- CBP-0: Giới Thiệu về Component Base Development
- CBP-1: Tổng Quan về Project Ví Dụ
- CBP-2: Khai Báo Component Cơ Sở và Entity Cơ Bản
- CBP-3: Khai Báo Component Cơ Bản, Tích Hợp Component vào Entity
- CBP-4: Giao Tiếp với Entity – Hệ Thống Chỉ Lệnh
- CBP-5: Truyền và Lấy Thông Số Từ Component
- CBP-6: Hàng Đợi Chỉ Lệnh
- CBP-7: Cài Đặt Phản Ứng cho Entity
- CBP-8: Component Điều Khiển và AI – Component Ra Lệnh
- CBP-9: Bộ Khởi Tạo Entity – Factory và Hệ Thống ID
- CBP-10: Hệ Thống Quản Lý Tập Trung Các Component Đặc Thù