Làm thế nào để tạo ra dây thừng?


8

Tôi muốn tạo lại trò chơi này , nhưng tôi không biết làm thế nào để tạo ra sợi dây, hoặc ảnh hưởng của nó lên quả bóng.

nhập mô tả hình ảnh ở đây

Về cơ bản, có một sợi dây, "được gắn", ở một đầu, vào con trỏ chuột và ở đầu kia gắn với một quả bóng lớn. Khi người dùng di chuyển con chuột của họ, sợi dây và quả bóng theo sau, như thể vung một cái sáo hoặc như vậy trong cuộc sống thực.

Làm thế nào tôi có thể tạo ra một sợi dây như trong trò chơi trên?

Tôi cần biết các khái niệm cơ bản và vật lý đằng sau việc tạo ra một sợi dây như vậy, chứ không phải làm thế nào để sử dụng một thư viện có sẵn để tạo ra một cái. Tôi muốn có thể thực hiện một sợi dây từ đầu, vì vậy cần biết làm thế nào nó có thể được thực hiện.

Cảm ơn!

Câu trả lời:


3

Sợi dây trong ví dụ của bạn có lẽ chỉ là một khớp vật lý đơn giản giới hạn khoảng cách của quả bóng với con trỏ chuột. Các khớp này thường được gọi là "Nối dây" hoặc "Khớp nối lò xo".

Có vẻ như các gợn sóng trong chuỗi không dựa trên mô phỏng vật lý thực tế. Nhiều khả năng đây là một đường cong bezier nơi các điểm kiểm soát bị đẩy ra xa khỏi trục trung tâm khi bóng ở gần vị trí chuột hơn.

Mặc dù câu trả lời được chấp nhận giải thích cách tạo ra một sợi dây thực tế trong động cơ vật lý, đôi khi, tốt hơn là nên có một giải pháp đơn giản hơn nhiều (như đã nêu ở trên). Giải pháp đơn giản hơn (chỉ với một khớp) cải thiện đáng kể tính ổn định của mô phỏng. Nhiều khớp được kết nối có lực lớn được áp dụng có xu hướng bị dao động và có thể dẫn đến các chuỗi khớp bị gãy và di chuyển thất thường.

Tất nhiên bạn cũng có thể kết hợp cả hai phương pháp, bằng cách tạo ra sợi dây của bạn như sau:

  1. Một chuỗi các nút, được kết nối bởi các khớp
  2. Khớp nối dây / lò xo từ nút đầu tiên đến nút cuối cùng của chuỗi đảm bảo rằng bạn không thể kéo chuỗi xa hơn khoảng cách tối đa nhất định (một trong những lý do chính khiến các chuỗi này trở nên không ổn định).

Điều này sẽ dẫn đến một chuỗi chuyển động thực tế hơn (thậm chí có thể phản ứng với các vật thể khác trong động cơ vật lý) nhưng sẽ đòi hỏi nhiều sức mạnh xử lý hơn là chỉ khớp nối lò xo với hành vi chuỗi "giả".


Cảm ơn đã chỉ ra rằng! Làm thế nào các điểm điều khiển của bezier sẽ bị thao túng, bởi vì ví dụ này có vẻ rất thực tế, không chỉ đơn giản giống như một bezier nơi nó được làm thẳng và "đè bẹp".
theonlygusti

Tôi không nghĩ rằng nó trông rất thực tế cả. Nó chỉ thêm một vài gợn sóng vào sợi dây, nó không uốn cong hay bất cứ thứ gì ... với tôi có vẻ như nó chỉ được duỗi thẳng và bị bẹp.
bummzack

Nhưng tôi đã nhận thấy rằng các đường cong có thể ở các góc khác nhau; làm thế nào đạt được điều này?
theonlygusti

Thêm một số bù đắp ngẫu nhiên để làm cho nó trông khác nhau mỗi lần?
bummzack

Được rồi; Có vẻ như đó là cách nó được thực hiện trong trò chơi, nhưng thực ra (và điều này sẽ có vẻ kỳ quái với mọi người) ngôn ngữ lập trình mà tôi đang sử dụng giúp tạo ra một công cụ vật lý như câu trả lời của Kyranstar chỉ ra hơn là vẽ các đường cong uốn lượn.
theonlygusti

10

Về cơ bản, bạn sẽ cần tạo ra một công cụ vật lý. Một sợi dây về mặt khái niệm là một bó "nút" được kết nối với nhau bằng lò xo.

Về cơ bản, mỗi tích tắc, mỗi nút sẽ tác dụng một lực lên các nút bên trên và bên dưới nó tỷ lệ thuận với khoảng cách của chúng (hoặc khoảng cách từ độ dài kéo dài thoải mái của chúng). Nếu bạn muốn gắn một quả bóng, chỉ cần kết nối nó với một khớp lò xo với nút dưới cùng của sợi dây.

Đây là một hướng dẫn tuyệt vời để tạo ra một công cụ vật lý, nhưng nó không thực sự đi vào các ràng buộc hoặc khớp.

Dưới đây là một hướng dẫn bao gồm các lò xo cơ bản, đó là tất cả những gì bạn cần cho một sợi dây như thế.

Đây là một sợi dây được tạo ra trong động cơ vật lý (rất cơ bản) của tôi . Nó rõ ràng có một số quirks (rung động kỳ lạ) nhưng nói chung đó là những gì bạn đang tìm kiếm. Khi bạn vẽ dây, chỉ cần không vẽ các nút.

Biên tập:

Để tạo ra một sợi dây dễ nhìn, một "khớp dây" thực sự trông đẹp hơn và gần với ví dụ của bạn hơn. Khớp chuỗi về cơ bản là một lò xo, nhưng nó chỉ sửa các đối tượng khi chúng ở quá xa nhau (không phải khi chúng ở quá gần).

Đây là dây của tôi với một chuỗi khớp thay thế: nhập mô tả hình ảnh ở đây


"Khi bạn vẽ dây, chỉ cần không vẽ các nút." - làm tôi cười :) Cảm ơn vì đã xem xét tính noob-ishness cực đoan của tôi. Bóng sẽ chỉ là một nút khác sau đó? Của một khối lượng lớn hơn? (Mỗi nút có một khối lượng không?)
theonlygusti

Có họ làm! Nói chung, cách tốt nhất để tính toán khối lượng một cách trực giác là cung cấp cho mỗi quả bóng một mật độ, và chỉ cần nhân nó với diện tích của nó. Bạn luôn có thể điều chỉnh điều này để có kết quả tốt hơn trong trò chơi thực tế của bạn.
Kyranstar 23/8/2015

Thông thường, tôi thực hiện điều này bằng ngôn ngữ hướng đối tượng, với một lớp cho một nút, với mật độ thuộc tính, khối lượng, v.v., nhưng tôi buộc phải sử dụng ngôn ngữ mà OOP không thể thực hiện được; Làm thế nào bạn sẽ thiết lập các nút, vv, dưới những ràng buộc này?
theonlygusti

Thành thật mà nói, tôi có rất ít kinh nghiệm với các ngôn ngữ không phải làOO. Bạn có thể xem Chipmunk2D , một công cụ vật lý được viết bằng C. Rõ ràng, bạn sẽ cần một số cách để lưu trữ dữ liệu này trong một đơn vị gắn kết.
Kyranstar

OK cảm ơn bạn; Câu hỏi cuối cùng, nút màu xám có phải là nút theo nghĩa của người khác không? Điều gì đặc biệt về nó để làm cho nó vẫn còn?
theonlygusti
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.