Những ngày đầu tìm hiểu cách phát triển game, tôi có một thời gian ngắn học thử C++. Tôi từng thử làm vài ví dụ nhỏ với open source C++ như Irrlicht, cocos2d-x. Mỗi lần thiết lập cho một project chạy được cảm giác như là một kỳ công, thực sự là khó hơn nhiều khi làm việc với các dự án sử dụng các ngôn ngữ lập trình khác như C# hay Java. Đặc biệt là cách thiết lập các thư viện API liên quan cho một project game khá mất thời gian. Ngoài ra hệ thống các file mã nguồn của C++ lại khá lằng nhằng nào là header với cpp và các thứ khác. Trong lúc lập trình thì việc include các header nếu không tốt sẽ dẫn tới những lỗi không ngờ. Nỗi ám ảnh kinh hoàng khác là việc quản lý bộ nhớ khi sử dụng các con trỏ (pointer) sẽ dẫn đến các lỗi rò rỉ bộ nhớ (memory leak) nếu không được quản lý tốt, đây là vấn đề mà các lập trình viên ít kinh nghiệm làm việc với C++ thường hay gặp phải. Một vấn đề khác khiến cho việc sử dụng C++ khó khăn đó là nó hỗ trợ các câu lệnh viết theo kiểu C lẫn C++, thành ra người mới học C++ sẽ dễ bị hoang mang bối rối khi tiếp cận với các mã nguồn được viết bởi các lập trình viên lão làng sử dụng pha trộn C và C++.
Nhìn chung sử dụng C++ hoàn toàn để phát triển game, đặc biệt là các game quy mô nội dung lớn, theo suy đoán cá nhân của tôi thì người phát triển sẽ mất khá nhiều thời gian để dọn dẹp xử lý những vấn đề linh tinh liên quan đến bản chất của ngôn ngữ C++ nhiều hơn là các vấn đề phát sinh từ bản thân nội dung game. Vào thời hoàng kim của C++, rất nhiều mã nguồn mở phục vụ cho việc phát triển game đã ra đời. Cho nên việc hiểu biết C++ ở một mức độ nào đó sẽ giúp ích nhiều cho việc tìm hiểu các kiến thức có sẵn trong các project đó. Ưu điểm của các game phát triển bằng C++ là tốc độ thực thi nhanh hơn so với các ngôn ngữ C# hay Java, tuy nhiên vào thời đại mà sức mạnh phần cứng phát triển cao như ngày nay, lợi thế đó có vẻ không còn nhiều lắm.
C++ khó và rắc rối vì nó là một ngôn ngữ lập trình mạnh mẽ cho phép lập trình viên làm được nhiều điều hơn so với các ngôn ngữ khác, như có thể giao tiếp được với các phần cứng để tối ưu hiệu suất của ứng dụng. Cứ tưởng tượng C++ là một con ngựa to khỏe, mạnh mẽ, tốc độ chạy nhanh với nhiều khả năng xuất sắc, tuy nhiên để điều khiển được nó người cưỡi cũng phải có một trình độ hiểu biết ở mức tương xứng để phát huy hết khả năng của con ngựa bất kham này.
Cũng chính vì những điều kể trên mà tôi quyết định sử dụng C# và Unity cho công việc của mình. Tuy vậy có nhiều lúc cũng ngán, muốn đổi gió cho có cảm giác mới lạ, tôi lại thử nghịch C++ bằng cách setup các project open source liên quan đến game cho chạy thử, vì qua nhiều năm các project này vẫn được người ta cập nhật. Trong lần thử gần đây nhất thì có một lần tôi thất bại trong việc viết một sample project bằng thư viện Ogre3d, nhưng lần tiếp theo thì thành công trong việc build nguyên bộ source code và chạy ứng dụng Example Browser. Trong lần thành công này, tôi phát hiện ra là mình cần phải dùng Cmake để thiết lập ra bộ source riêng cho Orge3d từ nguồn gốc của nó và build project dưới thiết lập Release. Thật là nhẹ nhõm, vì lần trước không hiểu nguyên nhân vì sao làm theo tutorial mà không được, tôi chợt nhận ra là tài liệu hướng dẫn của họ không được cập nhật kỹ càng lắm.
Thử nghiệm thứ hai với bộ thư viện Dear ImGUI, tôi build thử project và test các chức năng về User Interface có trong bộ thư viện này. Đây là bộ thư viện giúp các lập trình viên C++ tạo ra giao diện người dùng (User Interface) cho các ứng dụng của mình, bộ thư viện này cho phép ứng dụng sử dụng các thư viện đồ họa như OpenGL, Vulkan, DirectX, để tạo ra các thành phần giao diện như textbox, inputbox, window, popup, v.v… trong ứng dụng hay game của mình. Có nhiều game engine mã nguồn mở sử dụng Imgui để phát triển phần công cụ Editor. Nếu so sánh với các thành phần giao diện trong thư viện Winform của Microsoft cung cấp sẵn thì nó linh hoạt và dễ dùng hơn nhiều. Ngoài ra nó còn được một lập trình viên khác chuyển đổi qua nền tảng C#. Tôi cũng đã thử build sample project đó, kết quả khá thú vị khi đo dung lượng bộ nhớ sử dụng của sample C++ và C# chỉ chênh lệnh khoảng 7.4MB (13.5MB ~ 22.9MB). Một điểm cần chú ý là thư viện Imgui C# này sử dụng vài câu lệnh của phiên bản C# 8.0 nên cần sử dụng phiên bản visual studio phù hợp từ 2019 trở lên để build project.
Cũng như lần trải nghiệm làm một dự án nhỏ cho điện thoải Android lần trước, lần này tôi cũng tìm hiểu thêm được vài điều thú vị.
Comments