Làm cho điều nhanh nhìn chậm (Box2D)


9

Tôi đang làm việc với một trò chơi mà bạn điều khiển một trebuchet để ném bóng vào đối thủ.

Nó giống như một trò chơi gọi là 'Cuộc bao vây thời trung cổ'. Khi trebuchet đang vung tay, người chơi cần nắm bắt khoảnh khắc tốt nhất để nhấn nút và thả bóng. Sau đó bóng sẽ bay ở góc tiếp tuyến. nhập mô tả hình ảnh ở đây Vấn đề của tôi bây giờ là cánh tay trebuchet vung quá nhanh để người chơi có thể nắm bắt đúng thời điểm. Trong khi đó nó phải nhanh như vậy nếu không nó không thể ném đủ xa. Và có một sợi dây nhỏ nối giữa cánh tay bóng và trebuchet, nếu cánh tay vung quá chậm, quả bóng chỉ bị treo trên dây khi cánh tay di chuyển.

Tôi giải quyết vấn đề bằng cách bật kích thước bước, bất cứ khi nào cánh tay xoay, tôi thay đổi kích thước bước từ 1/60 thành 1/200. Và một khi người chơi thả bóng, nó trở lại 1/60.

Điều này hoạt động khá tốt, ngoại trừ trò chơi của tôi là dành cho nhiều người chơi với mạng. Vì vậy, thay đổi bước có thể gây ra vấn đề.

Một giải pháp khác tôi có thể nghĩ đến là cho phép nó lắc chậm, nhưng khi người chơi thả bóng, tôi tự thêm vận tốc vào bóng trong khi giữ hướng của nó. Tôi không thực sự thích giải pháp này vì nó trông giả tạo và tôi vẫn gặp vấn đề là quả bóng chỉ treo trên dây, trừ khi tôi tạo chuỗi rất ngắn ..

Xin hãy làm sáng tỏ điều này, cảm ơn!


BIÊN TẬP

Cảm ơn sự đóng góp của mọi người, tôi giải quyết vấn đề bằng cách làm cho cánh tay xoay chậm và khi người chơi thả bóng, lấy vận tốc của quả bóng và lần thứ hai. Nó trông giống hệt như thay đổi kích thước bước. Tôi chỉ cần làm thêm một việc nữa. Bởi vì cánh tay đang lắc rất chậm, quả bóng chỉ được treo trên đầu cánh tay thay vì vung. Tôi đã giải quyết điều này bằng cách tác dụng một lực bằng với lực hấp dẫn lên quả bóng trong và chỉ trong giai đoạn swing. Sau đó, nó không còn treo ở đó mà đu cùng với cánh tay.

Câu trả lời của @MrCranky là chi tiết và có vẻ khả thi, vì vậy tôi chấp nhận nó. :)


Có lẽ bạn có thể di chuyển trebuchet từ từ, nhưng nhân lên các lực tác động lên quả bóng? Tôi chưa từng làm việc với Box2D trước đây, rất tiếc nếu đây là một ý tưởng ngu ngốc. Ngoài ra, dự đoán duy nhất của tôi sẽ là xoay tròn với khối lượng của quả bóng để xem liệu quả nặng hơn hay nhẹ hơn có thể cho bạn kết quả chấp nhận được ở tốc độ chậm hơn. Ngoài ra, nó có thể là giá trị nhìn vào vật lý của trebuchets ngoài đời thực. Chúng trông hơi chậm, vì vậy có lẽ dữ liệu về chúng (kích thước, đạn, lực, v.v.) có thể cung cấp cho bạn một số ý tưởng cho mô phỏng của bạn.
Christian

2
Để vật lý máy tính hoạt động như "hàng thật" thực sự rất khó. Hầu như tất cả các động cơ vật lý mô phỏng các cơ thể cứng nhắc, có nghĩa là các hiệu ứng như uốn cong cánh tay trebouchet không được coi là vật lý dây cũng như hành vi vật chất theo bất kỳ cách nào chính xác, do đó, một mô phỏng chính xác mà không "gian lận" là không thể. Quá trình để tiến gần đến một cái gì đó trông giống như thế này: tinh chỉnh, chỉnh sửa, chỉnh sửa, gian lận, chỉnh sửa, chỉnh sửa, lừa đảo, gian lận, chỉnh sửa, bắt đầu lại, chỉnh sửa, chỉnh sửa, chỉnh sửa, lừa đảo, chỉnh sửa, gian lận , gian lận, tinh chỉnh.
Tìm hiểuCocos2D

4
Súng thần mèo sử dụng cách tiếp cận thực tế nhất cho vấn đề này: Con người thực sự rất tệ trong việc điều khiển thực tế vật lý và cần sự trợ giúp của máy móc, nếu bạn muốn đưa ra "cảm giác" của một trebuchet di chuyển đủ chậm để con người điều khiển bằng tay nhưng phóng ra nhanh hơn khả năng vật lý, bạn có thể muốn tạo ra một hình ảnh động hoàn toàn nghệ thuật của nó "bắn" và sau đó sinh ra quả bóng dựa trên nơi người dùng làm gián đoạn hoạt hình.
MickLH

Câu trả lời:


3

Theo bản năng, tôi muốn nói rằng chúng ta đang thiếu một phần đáng kể của bối cảnh cần trả lời, đó là "tại sao khía cạnh nhiều người chơi ngăn bạn thay đổi dấu thời gian?"

Nếu bạn đang cố gắng chia sẻ một mô phỏng vật lý qua kết nối mạng, thì đó thường là một việc khá khó thực hiện. Các mô phỏng phân kỳ rất dễ dàng và đặc biệt là với các kết nối mạng có thể bị mất gói, rất khó để giữ mọi thứ lại với nhau.

Câu trả lời đơn giản và mạnh mẽ nhất cho câu hỏi của bạn là sử dụng dấu thời gian thay đổi. Khi bạn tiếp cận thời điểm quyết định, thay vì cập nhật mô phỏng vật lý của bạn thêm một giây cho mỗi giây trong thế giới thực trôi qua, hãy cập nhật nó trong nửa giây hoặc một số phù hợp khác. Vì đó là hiệu ứng tích hợp, có lẽ bạn sẽ có thể thoát khỏi chỉ bằng cách giảm tốc độ cập nhật xuống mức thấp hơn trong cửa sổ quyết định, nhưng bạn cũng có thể nội suy nhanh chóng xuống mức thấp hơn. Dù bằng cách nào, về cơ bản, bạn đang phát lại mô phỏng vật lý trong chuyển động chậm. Nó nên hành xử hoàn toàn chính xác, chỉ cần đủ chậm để người chơi có thể đưa ra quyết định của họ. Tôi sẽ không xem xét bất kỳ phương tiện nào khác để làm mờ vật lý để làm cho nó hoạt động, rất có thể tất cả chúng sẽ hoạt động khủng khiếp và không cảm thấy 'đúng'.

Vì vậy, chúng tôi trở lại để thực hiện mạng. Nếu không có thêm thông tin, tôi đoán bạn có hai lựa chọn. Thứ nhất, nếu bạn đang hoạt động liên tục với bên được kết nối khác. Vì vậy, khi một người chơi phải chậm lại để đưa ra quyết định, hãy làm chậm cả hai người chơi như nhau. Điều này có thể sẽ gây cảm giác khó chịu và kỳ lạ cho người chơi không bắn, bởi vì nó sẽ gây nhầm lẫn thời gian phản ứng của chính họ.

Lần thứ hai, hãy tưởng tượng hai trebuchets bắn vào nhau. Trebuchet mất 10 giây để ném và cửa sổ bắn bắt đầu ở T + 5s. P1 bắt đầu chu kỳ bắn ở T + 0 và tại T + 5s làm chậm quá trình mô phỏng vật lý cục bộ của họ xuống 50%. Họ sẽ mất 15 giây để chơi trong toàn bộ chu kỳ. Vì vậy, tại T + 5s, P1 bảo P2 bắt đầu phát lại chu kỳ khởi động 10 giây ở tốc độ tối đa. Vì vậy, P1 thấy chu kỳ trebuchet mất 15 giây, P2 thấy mất 10 giây, nhưng cả hai người chơi đều thấy chu kỳ kết thúc ở T + 15s. Khi P1 thực sự phát hành, họ nói với P2 khi trong chu kỳ công chứng mà họ phát hành. Vì vậy, nếu P1 phát hành ở T + 10, thì đó thực sự là 7,5 giây trong chu kỳ ra mắt 10 giây. P2 sau đó có thể hiển thị bản phát hành ở T + 12,5 (7,5 giây vào phát lại cục bộ của chu kỳ) và cả hai mô phỏng người chơi nên đã phóng đạn vào cùng một điểm vật lý trong chu kỳ.

Vì vậy, trong phương pháp thứ hai này, bạn không còn mô phỏng theo bước khóa. Bạn đang chạy hai mô phỏng độc lập, nhưng theo dõi đầu vào của người chơi thay thế. Nếu cả hai đều được thông báo rằng người chơi đã phát hành vào 7.5s trong chu kỳ ra mắt, cả hai nên đồng ý về nơi đạn sẽ hạ cánh. Tuy nhiên, trên thực tế, điều đó có khả năng phân kỳ rất nhanh và bạn sẽ cần phải đồng bộ hóa các trạng thái mô phỏng bằng cách nào đó.


0

Tại sao không chỉ sao chép / điều chỉnh những gì đã tồn tại và hoạt động trong các trường hợp tương tự?

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


0

Nếu trebuchet của bạn di chuyển quá nhanh, giải pháp rõ ràng sẽ là mở rộng thời gian để làm cho nó chậm hơn. Đó là, cứ mỗi giây trong thời gian thực, chỉ thực hiện ví dụ 0,1 giây trôi qua trong mô phỏng vật lý của bạn. Bây giờ, từ quan điểm của người chơi, quả bóng sẽ di chuyển chậm hơn 10 lần.

Trên thực tế, có một cách khác để bạn có thể đạt được hiệu quả tương tự: thay vì chia tỷ lệ thời gian, chỉ cần chia tỷ lệ tất cả các hằng số vật lý của bạn theo đơn vị bao gồm cả thời gian. Ví dụ: gia tốc trọng trường có đơn vị tốc độ / thời gian = khoảng cách / thời gian², do đó, nếu trọng lực là hằng số duy nhất trong trò chơi của bạn, việc giảm tỷ lệ xuống 100% sẽ đạt được hiệu quả tương tự như làm chậm thời gian theo hệ số 10 .

Tất nhiên, nếu mô hình vật lý của bạn bao gồm các hằng số khác có đơn vị thời gian (hoặc tốc độ = khoảng cách / thời gian hoặc gia tốc = khoảng cách / thời gian, v.v.), bạn cũng sẽ phải chia tỷ lệ cho các quỹ đạo đó nếu bạn muốn giữ các quỹ đạo như cũ .

Lưu ý rằng có một giới hạn về mức độ thực tế bạn có thể đi với điều này: nếu bạn làm chậm thời gian, giả sử, hệ số 100, trebuchet của bạn sẽ thực sự dễ kiểm soát, nhưng người chơi của bạn cũng có thể cảm thấy nhàm chán khi chờ đợi những quả bóng để từ từ trôi xuống sau khi bắn chúng. Nếu đó là một vấn đề, bạn có thể cần phải sử dụng các thủ thuật nâng cao hơn như những câu hỏi được đề xuất trong các câu trả lời khác, chẳng hạn như sử dụng tỷ lệ thời gian thực sự chậm trong khi trebuchet đang bắn, nhưng chuyển sang quy mô thời gian nhanh hơn khi bóng được đưa ra.


cảm ơn, nhưng có lẽ bạn không thấy chỉnh sửa của tôi. Vâng, tôi đã giải quyết nó bằng phương pháp cuối cùng trong câu trả lời của bạn
Arch1tect
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.