2010-01-05 30 views
5

Tôi đã nhận thấy rằng một số lập trình viên làm động các đối tượng dựa trên sự khác biệt về thời gian. Tôi không chắc chắn lý do tại sao hoặc thậm chí nếu điều này là hợp lý. Có ai biết ý nghĩa không?Tại sao hoạt ảnh đôi khi được thực hiện bằng các bước dựa trên khoảng thời gian đã trôi qua?

Dưới đây là một đoạn mã mà giải thích những gì tôi có nghĩa là:

var timePassed:int = getTimer()-lastTime; 
lastTime += timePassed; 
var newBallX = ball.x + ballDX*timePassed; 
var newBallY = ball.y + ballDY*timePassed; 
+0

xem chủ đề này: http://stackoverflow.com/questions/1284886/optimizing-transition-movement-smoothness-for-a-2d-flash-game – Cay

Trả lời

16

Khi bạn Animate dựa trên thời gian, bạn làm cho mình độc lập với tốc độ khung hình. Không có vấn đề bao nhiêu khung đã trôi qua, quả bóng của bạn sẽ di chuyển cùng một khoảng cách trong một khoảng thời gian nhất định. So sánh điều đó tùy thuộc vào tốc độ khung hình, phụ thuộc vào nhiều biến, như mức độ xử lý có sẵn để thực hiện hoạt ảnh.

Đây là vấn đề trò chơi-vật lý phổ biến - hãy kiểm tra số điện thoại "Fix Your Timestep!" article của Glenn Fiedler để biết chi tiết hơn về điều này. (Làm điều đó đúng hơn một chút phức tạp hơn là chỉ nhân các vectơ hướng của bạn với dấu thời gian.)

+1

Và nếu bạn đã từng xem tốc độ khung hình của một SWF chạy, bạn sẽ hoàn toàn hiểu được sự cần thiết của câu trả lời của John :) – Aaron

1

Tại sao KHÔNG làm theo cách đó? Trái ngược với việc làm gì? Nó là một chuyển động tuyến tính đơn giản phải không? Đây là một suy nghĩ: điều này cho phép bóng để bắt kịp với vị trí dự định của nó trong trường hợp các chương trình khác đang làm chậm máy tính.

+0

Tôi đã nghĩ về điều đó. – numerical25

0

Hệ điều hành máy tính hiện đại chạy nhiều tác vụ cùng một lúc và bạn không phải lúc nào cũng nhận được lát thời gian của mình. Bằng cách sử dụng sự khác biệt trong đồng hồ thời gian thực, bạn làm mịn chuyển động so với nếu bạn di chuyển cùng một lượng mỗi lần qua vòng lặp, điều này có thể khiến nó trông giật nếu hệ điều hành có thêm vài phần nghìn giây cho quá trình khác trước khi nó quay lại cho bạn.

4

Logic đơn giản.

BallDX => bóng Delta X => Khoảng cách bóng có thể di chuyển trên tọa độ x trong một giây

timepassed => số lượng thời gian trôi qua

if OldBallX = 0 
if BallDX = 10 
if TimePassed = 1 sec 
Then NewBallX = OldBallX + (BallDX*TimePassed) 

Có nghĩa

NewBallX = 0 + (10 * 1) = 10 pixels 

Trong trường hợp đó

if TimePassed = 0.5 sec (half a second) 

Sau đó,

NewBallX = 0 + (10 * 0.5) = 5 pixels 

Hợp lý?

0

Khía cạnh quan trọng nhất của việc độc lập với tốc độ khung hình là bạn không phải chuỗi tốc độ khung hình xuống. Nó được sử dụng để trở lại trong thời đại đen tối, trò chơi sẽ được viết để sử dụng CPU càng nhiều càng tốt và tốc độ khung hình được xác định bởi tốc độ CPU. Tôi nhớ chơi trò chơi trên máy 16MHz của tôi mà sẽ có những thứ bay quá nhanh, bạn không thể phản ứng, bởi vì chúng được viết cho máy 1MHz. Các lập trình viên đã lên kế hoạch này và bắt đầu viết các trò chơi giới hạn tốc độ khung hình, thường là 30fps trong những năm đầu, sau 60 khung hình/giây (thường bị khóa với VSYNC của màn hình). Điều này giải quyết vấn đề, nhưng thực sự gây phiền nhiễu cho những người trong chúng ta với những chiếc máy tính tuyệt vời muốn chuyển động nhiều hơn. Cuối cùng, họ bắt đầu viết các trò chơi hoàn toàn độc lập với tốc độ khung hình, cho phép bạn chơi trò chơi với tốc độ 700 khung hình/giây và có được trải nghiệm tương tự ở tốc độ 20 khung hình/giây, ngoại trừ đồ họa mượt mà hơn. Và nó cũng có thể đối phó với tải thay đổi trong khi chơi, như những người khác đã nói, có thể rất quan trọng với các hệ điều hành đa nhiệm hiện nay.

0

Nếu bạn thực hiện các hình ảnh động như một hàm của thời gian, bạn có thể độc lập với tỷ lệ khung hình hơi, có nghĩa là nếu bạn thực hiện hoạt hình của bạn cho 24fps, bạn có thể dễ dàng điều chỉnh các hình ảnh động để phù hợp với tốc độ 30 fps kịch bản nếu nó động (như trong xác định bởi một hàm/trái ngược với khung bằng khung bản vẽ nơi quy hoạch là tất cả mọi thứ)

này được truyện ngắn, cho toàn bộ lời giải thích có một cái nhìn tại ol tốt Robert Penner của 'chương trên Motion, Tweening and Easing.

Các vấn đề liên quan