Sử dụng đối tượng C-Script trong một DLL

Một phần của tài liệu ứng dụng trí tuệ nhân tạo trong xây dựng game (Trang 91 - 92)

IV. Giao tiếp với các DLL

2. Sử dụng đối tượng C-Script trong một DLL

Chúng ta đã biết được cách thêm một chỉ lệnh C-Script mới, cịn bên trong DLL chúng ta có thể truy cập biến, đối tượng và hàm như thế nào? Chúng ta có một vài hàm thư viện để làm điều này. Tất cả các hàm thư viện được cung cấp bởi SDK đều bắt đầu bằng a5dll_. Trong đó, hàm thường sử dụng nhất là:

long a5dll_getwdlobj(char *name);

Hàm này trả về địa chỉ của một đối tượng hoặc biến có tên được đưa. Nó có thể sử dụng để đọc hoặc ghi bất kì một đối tượng C-Script bên trong một DLL. Nếu đối tượng không tồn tại, nó sẽ trả về NULL và sẽ xuất hiện một lỗi. Thí dụ một hàm DLL mà truy cập đối tượng trong C-Script.

// thêm giá trị được đưa vào một vector trong C- Script

fixed AddToVector(fixed value) {

// lấy địa chỉ của một biến

static fixed *myvector = (fixed *)a5dll_getwdlobj("myvector");

// thêm cùng giá trị đến 3 thành phần của vector

myvector[0] += value; myvector[1] += value; myvector[2] += value; return value;

}

Vì thế, chúng ta có thể sử dụng hàm này để lấy một con trỏ chỉ đến một đối tượng bất kì trong C-Script, khơng kể nó được định nghĩa trước bởi engine hoặc do chúng ta định nghĩa. Trong trường hợp, nó là một vector được định nghĩa trong C-Script như sau:

Chương 3: Game Engine – Cách viết một DLL

và hàm a5dll_getwdlobj sẽ trả về một con trỏ đến vector này, cũng chính là một mảng các số fixed. Tại sao chúng ta lại không chuyển sang số kiểu fixed?. Bởi vì value có kiểu là fixed và chúng ta có thể cộng hai số kiểu fixed giống như 2 số nguyên. Nhưng chúng ta không thể chia hoặc nhân 2 số này.

Như vậy, bây giờ chúng ta đã biết cách đọc và thay đổi các biến trong C- Script, nhưng với những đối tượng phức tạp như panel, view, entity thì sao?

Hãy nhìn vào tập tin a5dll.h – chúng ta sẽ tìm thấy tất cả các cấu trúc được định nghĩa trong C-Script, như A4_STRING, A4_ENTITY, A4_PARTICLE,

A4_BMAP, A4_TEX … Tất cả những cấu trúc này bắt đầu với A4_ ( ngay cả

trong phiên bản A6). Chúng ta sẽ nhận được một con trỏ chỉ đến cấu trúc như với các biến.

// phóng to, thu nhỏ camera view

fixed ZoomIn(fixed value) {

static A4_VIEW *camera = (A4_VIEW *)a5dll_getwdlobj("camera");

return (camera->arc -= value); }

camera là một khung nhìn (view) đã được định nghĩa trước. Bởi vì

a5dll_getwdlobj trả về một số nguyên kiểu long, chúng ta có thể ép nó đến

kiểu mong muốn, như toán tử (A4_VIEW *) ở đây. Trong a5dll.h, chúng ta có thể thấy các khai báo cấu trúc, với cấu trúc A4_VIEW chứa đựng tất cả các tham số mà chúng ta sử dụng trong C-Script, như arc, ambient…Và một khi có được con trỏ chúng ta có thể thay đổi và đọc tất cả chúng.

Một phần của tài liệu ứng dụng trí tuệ nhân tạo trong xây dựng game (Trang 91 - 92)

Tải bản đầy đủ (PDF)

(120 trang)