Có một cách khác trong JavaScript là lấy thời gian tính bằng mili giây bằng cách sử dụng đối tượng ngày hoặc ít nhất là một cách để sử dụng lại đối tượng đó, mà không phải khởi tạo một đối tượng mới mỗi khi tôi cần lấy giá trị này? Tôi đang hỏi điều này bởi vì tôi đang cố gắng tạo một công cụ trò chơi đơn giản bằng JavaScript và khi tính toán "thời gian khung delta", tôi phải tạo một đối tượng Ngày mới mỗi khung. Mặc dù tôi không quá lo lắng về ý nghĩa hiệu suất của việc này, tôi đang gặp một số vấn đề với độ tin cậy của thời gian chính xác mà đối tượng này trả về.
Tôi nhận được một số "bước nhảy" kỳ lạ trong hoạt hình, cứ sau một giây và tôi không chắc điều này có liên quan đến Bộ sưu tập rác của JavaScript hay giới hạn của đối tượng Date khi cập nhật quá nhanh. Nếu tôi đặt giá trị delta thành một số hằng, thì hoạt ảnh nếu hoàn toàn mượt mà, vì vậy tôi khá chắc chắn rằng "bước nhảy" này có liên quan đến cách tôi có được thời gian.
Mã liên quan duy nhất tôi có thể cung cấp là cách tôi tính thời gian delta:
prevTime = curTime;
curTime = (new Date()).getTime();
deltaTime = curTime - prevTime;
Khi tính toán chuyển động / hoạt hình tôi nhân một giá trị không đổi với thời gian delta.
Nếu không có cách nào để tránh mất thời gian tính bằng mili giây bằng cách sử dụng đối tượng Date, thì một hàm sẽ tăng một biến (là thời gian trôi qua tính bằng mili giây kể từ khi trò chơi bắt đầu) và được gọi là sử dụng hàm SetTimer với tốc độ một lần mỗi mili giây là một sự thay thế hiệu quả và đáng tin cậy?
Chỉnh sửa: Bây giờ tôi đã kiểm tra mã của mình trong các trình duyệt khác nhau và dường như "bước nhảy" này thực sự chỉ rõ ràng trong Chrome, không phải trong Firefox. Nhưng nó vẫn tốt nếu có một phương pháp hoạt động trong cả hai trình duyệt.
Date.getMillisecondschỉ trả về một phần nghìn giây trong giây hiện tại, tức là 0 đến 999? Bạn không sử dụng chức năng này trong ví dụ của mình, nhưng có lẽ nó đang được sử dụng ở nơi khác hoặc trên một nhánh khác?