Phát hiện va chạm dây 2D


13

Tôi muốn tạo một sợi dây có thể va chạm với các đối tượng như trong video youtube sau:

Dây vật lý trò chơi 2D

Tôi nghĩ rằng bạn thực hiện tích hợp verlet sử dụng các điểm và kết nối các điểm này với các đường. Tôi đang cố gắng tìm ra loại phát hiện va chạm nào bạn sẽ áp dụng cho sợi dây để có được hiệu ứng trong video.

Tôi nghĩ bạn sẽ phải làm một số cd cho mỗi điểm. Tôi muốn sử dụng box2D, vì vậy tôi tự hỏi sẽ làm cho mỗi điểm trở thành một cơ thể cứng nhắc làm việc? Lời khuyên nào sẽ được đánh giá cao.


1
Nếu bạn cẩn thận xem video trong liên kết của mình, thì rõ ràng "sợi dây" được mô phỏng thực sự là một chuỗi, tức là một số lượng lớn các phân đoạn không linh hoạt được kết nối trong một dòng, thay vì nguyên thủy linh hoạt liên tục. Điều này là rõ ràng nhất khi sợi dây quấn quanh chướng ngại vật tròn nhỏ; bạn có thể thấy các góc quay xung quanh nó. Một chuỗi là rất nhiều, dễ dàng để mô phỏng hơn một sợi dây liên tục; mỗi liên kết chỉ là một va chạm nguyên thủy và chúng gắn bó vĩnh viễn với nhau. Đối với hành vi thuyết phục hơn, làm cho mỗi liên kết một mùa xuân rất cứng thay vì hoàn toàn không linh hoạt.
Paul Z

Câu trả lời:


6

Vì bạn đang sử dụng Box2D, bạn có thể tạo một loạt các hình chữ nhật và sử dụng các khớp của Box2D để nối chúng. Ở đó bạn có dây của bạn.

Để tránh các góc thò ra khỏi một sợi dây bị uốn cong, tôi có thể tưởng tượng ra hai lựa chọn:

  1. Cung cấp cho các đoạn dây của bạn kết thúc tròn (để chúng không còn là hình chữ nhật nữa)
  2. Làm cho sợi dây này vô hình và chỉ sử dụng nó cho vật lý. Lấy vị trí của các khớp trong mỗi khung và sử dụng nó để vẽ một sợi dây khi đang bay mà người chơi sẽ nhìn thấy.

Cảnh báo: Tôi chưa bao giờ tự mình thử điều này, nhưng tôi không thấy làm thế nào một loạt các hình chữ nhật được nối có thể thất bại khi video bạn đăng hiển thị thực tế giống như vậy được ngụy trang.

Chỉnh sửa: Tôi chỉ thấy PaulZ và tôi nhận ra điều tương tự. Đi đọc bình luận của anh ấy về câu hỏi là tốt.


2

Một Google nhanh chóng ném cái này lên đây . Một bản demo, mô tả và mã (trong Flash) bằng Box2D để thực hiện một sợi dây đơn giản. Sợi dây va chạm với chính nó và khối ở đầu cảnh.


0

Dưới đây là những gì tôi sẽ làm, làm cho mỗi điểm trên đường thẳng thành một vòng tròn, tạo đủ các điểm mà các vòng tròn trùng nhau. Tether từng điểm với hàng xóm của nó, thay vì va chạm tiêu chuẩn, dây buộc này sẽ khiến các điểm giữ khoảng cách cố định với nhau.

Tôi không biết Box2D, nhưng tôi đoán chức năng cần có là có.


0

Ban đầu Box2D có một bản demo cầu dây được làm bằng các hộp mỏng được nối với các ràng buộc điểm-điểm; đó sẽ là một nơi tốt để bắt đầu (tôi không biết nếu nó vẫn xuất xưởng với bản demo đó, nhưng nó sẽ đơn giản để tạo lại).

Thật dễ dàng để thực hiện dây như các hạt có giới hạn khoảng cách độc lập với trình mô phỏng cơ thể cứng nhắc (như bạn đã đề cập, sử dụng sơ đồ giải quyết ràng buộc và tích hợp Verlet như mô tả trong bài viết này: http://www.gamasutra.com/resource_guide/ 20030121 / jacobson_pfv.htm ), nhưng nếu bạn muốn các cơ thể cứng nhắc phản ứng với sợi dây của bạn (như trong video, với hộp treo lủng lẳng) thì nó phức tạp hơn nhiều. Tôi sẽ bắt đầu với một bộ công cụ toàn diện như Box2D và làm việc ngược lại sau đó thử và xây dựng từ các hạt.


0

Tôi nhớ trò chơi Allegro này: Cupid , từ SpeedHack 2002. Nó chứa một triển khai cho các sợi dây va chạm với khung cảnh. Xem các lớp PhysParticles và HeartTrails trong tệp heart_tails.cpp trong mã nguồn của nó .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.