Đây là cách bạn có thể làm điều đó:
Chuyển động gần đúng
Mọi đối tượng vật lý đều cần các vectơ này:
- Vị trí : Trường hợp đối tượng.
- Tốc độ : Làm thế nào vị trí của nó đang thay đổi.
- Tăng tốc : Tốc độ của nó đang thay đổi như thế nào.
Vì vậy, theo trực giác, bạn cần thực hiện loại điều này mọi khung hình cho mọi đối tượng vật lý a
:
a.speed += a.acceleration
a.position += a.speed
Cạm bẫy : Đây được gọi là phương pháp tích hợp Euler . Xấp xỉ này là tốt hơn cho tốc độ và gia tốc nhỏ và với các bước thời gian nhỏ. Trong một trò chơi, điều này là bình thường. Nhưng nếu một vật thể di chuyển rất nhanh về phía một bức tường mỏng hoặc trực tiếp về phía một vật thể chuyển động khác, nó có thể bỏ qua va chạm với vật thể đó khi vị trí của nó được tăng thêm một lượng đủ lớn để vượt qua nó hoàn toàn. Nếu bạn có các vật thể chuyển động nhanh, bạn có thể cần Phát hiện Va chạm liên tục để thoát khỏi điều này.
Va chạm
Va chạm có thể được xấp xỉ với loại trình tự này:
- Phát hiện : Người ta phát hiện hai cơ thể giao nhau.
- Giải quyết : Vị trí của mỗi cơ thể được thay đổi để chúng không còn giao nhau.
- Vật lý : Tốc độ của mỗi cơ thể được thay đổi để tính động lượng, ma sát và phục hồi (độ nảy).
Điều này được gọi là Phát hiện va chạm rời rạc, vì nó xảy ra tại các thời điểm riêng biệt. Mỗi bước đáng được chú ý:
Bước 1: Phát hiện va chạm (Có phải mọi thứ đang va chạm?)
Đối với hai vòng tròn : Chỉ cần kiểm tra xem tâm của chúng có lớn hơn tổng bán kính của chúng không.
Đối với hai hình chữ nhật : Kiểm tra xem có bất kỳ tọa độ góc nào của chúng nằm trong hình chữ nhật khác không.
Đối với bất kỳ điều gì liên quan đến đa giác phức tạp hơn , bạn sẽ cần Định lý phân tách trục , đây là một chủ đề cho một câu hỏi khác.
Cạm bẫy : Thực sự có nhiều loại va chạm khác mà bạn có thể muốn xem xét. Một số thực sự phức tạp: Đa giác lồi có thể giao nhau nhiều lần !
Bước 2: Giải quyết va chạm (Di chuyển chúng ra xa nhau.)
Một phương pháp đơn giản để giải quyết xung đột là dịch bằng cách thâm nhập tối thiểu , sử dụng các giá trị thu được từ phát hiện va chạm. Điều này về cơ bản liên quan đến việc di chuyển các vật thể ngoài khoảng cách di chuyển tối thiểu có thể.
Ví dụ, xem xét va chạm vòng tròn trong đó một trong các vòng tròn được cố định tại chỗ. Vectơ chuyển vị tối thiểu có cùng hướng với sự khác biệt giữa các vectơ trung điểm của chúng. Độ dài của nó là sự khác biệt giữa tổng bán kính của chúng và khoảng cách giữa các tâm.
Ý tưởng này dễ dàng khái quát cho các hình dạng khác.
Cạm bẫy : Nếu cả hai vật thể va chạm đều có thể di chuyển được, bạn có thể phải di chuyển cả hai vật thể theo một phần nhỏ của khoảng cách tổng thể để có được sự gần đúng đáng tin cậy về chuyển động của chúng. Họ rõ ràng sẽ phải di chuyển theo các hướng khác nhau.
Bước 3: Va chạm vật lý (Thay đổi khác.)
Điều rõ ràng nhất có xu hướng xảy ra là một hoặc hai trong số các đối tượng thay đổi hướng tức là quay vectơ tốc độ của nó. Điều này là khá dễ dàng để thực hiện.
Cạm bẫy : Các vật thể có thể co giãn , nhưng chúng có thể không , trong trường hợp đó, tổng năng lượng trong hệ thống bị giảm. Bạn có thể cần kéo do sức cản của không khí. Ma sát (đặc biệt là ma sát tĩnh ) rất phức tạp để thực hiện .
Một số kết luận
Mô phỏng thực tế khó hơn theo cấp số nhân nếu bạn muốn mô phỏng. Bạn đang đi vào một bãi mìn của vô số trường hợp cạnh, công thức khó khăn và những tài liệu nghiên cứu ngày càng phát triển.
Nếu nhu cầu của bạn đơn giản hoặc bạn ham học hỏi, hãy thử nó.
Nếu nhu cầu của bạn phức tạp hoặc bạn không thích toán học, hãy lấy một công cụ vật lý để trình bày chi tiết cho bạn. Box2D và Bullet khá phổ biến trong các trò chơi.