Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Các bước đầu về DirectX phần 4 docx
Nội dung xem thử
Mô tả chi tiết
Beginning DirectX9 Dịch bởi TransTeam diễn đàn Gamedev.VN
55
LARGE_INTEGER timeEnd;
QueryPerformanceCounter(&timeStart);
Render( );
QueryPerformanceCounter(&timeEnd);
LARGE_INTEGER numCounts = ( timeEnd.QuadPart – timeStart.QuadPart )
Sau khi các đoạn mã trên đã được thực hiện xong, biến numCounts sẽ chứa giá trị số
xung nhịp của bộ đếm thời gian đã diễn ra giữa hai lần gọi tới hàm
QueryPerformanceCounter. Biến QuadPart được khai báo với kiểu LARGE_INTEGER
tương đương 64bit dữ liệu trên bộ nhớ và được dùng để nhận giá trị trả về của bộ đếm
thời gian hệ thống.
Sau khi bạn đã có giá trị chênh lệch khoảng thời gian giữa hai lần gọi, bạn sẽ cần thực
hiện một bước nữa trước khi bạn có được một giá trị hữu dụng trong quá trình hiển thị
ảnh động của sprite. Đó là bạn cần phải chia giá trị numCounts này cho tần số hoạt động
của bộ đếm thời gian.
Hàm QueryPerformanceFrequency dùng để lấy về giá trị tần số của bộ đếm thời gian này
của hệ thống.
Hàm QueryPerformanceFrequency này chỉ yêu cầu duy nhất một đối số: con trỏ đối
tượng có kiểu LARGE_INTEGER để lưu giữ kết quả trả về của hàm. Mã nguồn minh hoạ
quá trình gọi hàm này được liệt kê dưới đây:
LARGE_INTEGER timerFrequency;
QueryPerformanceFrequency(&timerFrequency);
Sau khi bạn có giá trị tần số hoạt động của bộ đếm, bạn có thể sử dụng kết hợp với giá trị
của biến numCounts để tính toán tỷ lệ thời gian của quá trình di chuyển cũng như hiển thị
ảnh động của sprite. Đoạn mã sau minh hoạ quá trình tính toán:
float anim_rate = numCounts / timerFrequency.QuadPart;
Bây giờ thì chúng ta đã có giá trị tỷ lệ cần thiết để thể hiện các hình ảnh động một cách
mượt mà hơn.
Thay đổi cấu trúc dữ liệu của các Animation
Trong phần này chúng ta sẽ ứng dụng những kiến thức đã học ở trên để thay đổi lại mã
nguồn ví dụ 4 có sử dụng kỹ thuật hiển thị hình động trên bộ định thời gian hệ thống.
Bước đâu tiên chúng ta cần thực hiện đó là thay đổi lại cấu trúc dữ liệu của Animation. Ở
trong phần trước chúng ta đã khai báo các biến moveX và moveY là các biến kiểu
nguyên. Chúng ta sẽ phải thay đổi kiểu dữ liệu này sang kiểu thực float để các hình ảnh
của sprite sẽ được di chuyển chính xác hơn. Dưới đây là cấu trúc của sprite đã được cập
nhật lại:
struct {
RECT srcRect; // holds the location of this sprite
// in the source bitmap
float posX; // the sprite’s X position
float posY; // the sprite’s Y position
Chú ý:
Tần số hoạt động của bộ đếm là giá trị đại diện cho số xung nhịp mà đồng hồ thực hiện
trong một giây.