2010-01-25 11 views
9

Trong một trò chơi bóng đá, tôi tính toán lực lượng chỉ đạo bằng cách sử dụng các hành vi lái. Phần này là ok. Tuy nhiên, tôi đang tìm cách tốt nhất để thực hiện chiến thuật 2d đơn giản của con người. Ví dụ, người chơi không nên "chỉ đạo" (hoặc đơn giản là tăng tốc tính từ lực lái) đến vận tốc hiện tại khi cos (góc) giữa lực lái và vận tốc dòng hoặc vectơ tiêu đề thấp hơn 0,5 vì có vẻ như người chơi là một tên lửa. Một con người, khi có một sự thay đổi quan trọng của hướng, chậm lại và khi nó đã đủ chậm, nó bắt đầu tăng tốc theo hướng mới.Mô hình con người đang chạy trên sân bóng đá

Có ai có lời khuyên nào, ý tưởng về cách đạt được hành vi này không? Cảm ơn trước.

Trả lời

4

Làm cho hướng thay đổi rất nhanh nhưng không có ma sát hoàn hảo. EG Super Mario

Edit: nhưng chân không nên trượt - sử dụng hình ảnh động về thủ tục cho chân

+0

Tôi không có đồ họa phức tạp đó, hiện tại nó chỉ đơn giản là GDI + để vẽ chế độ xem từ trên xuống của trường và trình phát. Bạn có nghĩa là ở mỗi bước, tôi chỉ nên đặt véc tơ vận tốc theo cùng hướng với gia tốc được tính toán (từ lực lái) và nếu cos (góc) nằm dưới một giá trị nhất định (biểu thị sự thay đổi lớn về hướng) , Tôi nên thiết lập lại vận tốc trước khi thêm cường độ gia tốc? Điều này sẽ khiến người chơi luôn đi đúng hướng và nếu nó đột ngột thay đổi hướng, vận tốc của nó sẽ giảm xuống 0 trước khi phản ứng lại. – sowee15

2

Có lẽ bạn có thể tính toán độ cong. Nếu giá trị độ cong lớn, tốc độ sẽ chậm lại. http://en.wikipedia.org/wiki/Curvature

+1

Không sử dụng cos (góc) giữa vận tốc hiện tại và lực lái mong muốn có phần tương đương và đơn giản hơn? – sowee15

+0

có nó đơn giản hơn – kame

3

Điều này đã được nghiên cứu và phát triển theo sáng kiến ​​mang tên "Robocup". Họ có một giải đấu 2D mô phỏng nên thực sự giống với những gì bạn đang cố gắng hoàn thành.

Dưới đây là một liên kết mà nên chỉ cho bạn đi đúng hướng: http://wiki.robocup.org/wiki/Main_Page

+0

Có, tôi biết Robocup và bạn nói đúng, nó rất giống với những gì tôi đang làm. Tôi phải thừa nhận tôi đã không kiểm tra mã nguồn của máy chủ, nhưng tôi đã nhìn thấy video của mô phỏng robocup trên youtube. Tôi nghĩ rằng các hành vi phải ressemble một cái gì đó giống như những gì tôi mô tả trong cmy bình luận để tm1rbrt (xem ở trên)? – sowee15

1

Tại tốc độ thấp một con người có thể bật một xu. Ở tốc độ cao, chỉ có các lượt rất nhẹ đòi hỏi không làm chậm. Tốc độ và bán kính của lần lượt do đó tương quan mạnh mẽ.

Số lượng người chậm lại khi nhắm tới mục tiêu thực ra là cuộc gọi phán đoán, không phải là tính toán tự động. Một con người có thể đến gần như một điểm dừng hoàn toàn, quay ngoắt và chạy thẳng về phía mục tiêu. Một con người khác có thể làm chậm chỉ một chút và tạo ra một vòng cung cong rộng - ngay cả khi điều này làm tăng tổng chiều dài của mục tiêu. Điểm báo trước duy nhất là nếu mục tiêu mong muốn nằm trong bán kính của đường cong ở tốc độ hiện tại, thì đường đi hợp lý duy nhất là chậm vì nó sẽ mất một vòng rộng xa mục tiêu để đạt được nó (thay vì xoay vòng nó không ngừng).

Đây là cách tôi thực hiện. Tôi xin lỗi cho các đơn vị Imperial nếu bạn thích số liệu.

  1. Con người nhanh nhất từng được ghi lại chỉ hoạt động dưới 28 dặm một giờ. Mỗi đơn vị con người của bạn nên có tốc độ tối đa từ 1 đến 28 dặm một giờ.
  2. Tạo bảng 29 phần tử của tốc độ tăng tốc và giảm tốc tối đa của một người đi theo từng mph theo đường thẳng. Nó không phải là chính xác - chỉ các giá trị tăng tốc và giảm tốc gần đúng cho mỗi giá trị. Tạo các phiên bản nhanh, trung bình, chậm của bảng 29 phần tử và gán mỗi người vào một trong các bảng này. Bảng được chọn có thể được ánh xạ tới tốc độ tối đa của thiết bị, vì vậy một đơn vị có cực đại 10mph sẽ là một máy gia tốc chậm.
  3. Tạo một bảng 29 phần tử của bán kính sắc nét nhất một con người có thể biến thành mph đó (0-28).

Bây giờ, khi làm động mỗi đơn vị con người, nếu bạn có thông tin mục tiêu và phải chọn tăng tốc từ đó, nhiệm vụ sẽ khó hơn. Nếu thay vào đó bạn chỉ có một vectơ lực, nó sẽ dễ dàng hơn. Hãy bắt đầu với vector lực.

  1. Nếu tăng tốc và góc kết quả của vectơ lực vượt quá giới hạn khả năng của đơn vị, hãy hạn chế vectơ mới của đơn vị ở góc tối đa cho phép và giảm tốc độ tối đa của đơn vị.
  2. Trong khi đánh dấu đồng hồ tiếp theo, chậm hơn, nó sẽ có thể biến mạnh hơn.
  3. Nếu vectơ lực có thể hoàn toàn được cung cấp, nhưng thiết bị đang di chuyển chậm hơn tốc độ tối đa của độ cong đó, hãy áp dụng gia tốc tối đa mà đơn vị có ở tốc độ đó.

Tôi biết chi tiết sẽ khá khó khăn, nhưng tôi nghĩ đây là một khởi đầu tốt.

Đối với phiên bản đường dẫn nơi bạn có mục tiêu và cần chọn một lực để áp dụng, vấn đề có một chút khác biệt và thậm chí khó hơn. Bây giờ tôi đã hết ý tưởng - nhưng đủ để nói điều đó, với điều kiện ví dụ của con người đã chạy khỏi mục tiêu ở tốc độ cao nhất, sẽ có một con đường tốt nhất nằm giữa một mặt, làm chậm đủ trong khi quay để hoàn thành một vòng cung hoàn hảo cho mục tiêu, và mặt khác dừng hoàn toàn, xoay hoàn toàn và chạy thẳng đến mục tiêu.