Ngăn chặn thảm họa vượt trội trong các trò chơi đua xe


9

Khi chơi GTA III trên Android, tôi nhận thấy một điều khiến tôi khó chịu trong hầu hết mọi trò chơi đua xe mà tôi đã chơi (có lẽ ngoại trừ Mario Kart): Lái xe thẳng về phía trước rất dễ, nhưng đường cong thực sự rất khó. Khi tôi chuyển làn đường hoặc vượt qua ai đó, chiếc xe bắt đầu quay đi quay lại, và bất kỳ nỗ lực nào để sửa nó đều khiến nó chỉ tệ hơn. Điều duy nhất tôi có thể làm là nhấn phanh. Tôi nghĩ rằng đây là một số loại quá mức.

Điều khiến nó khó chịu là nó không bao giờ xảy ra với tôi trong đời thực (cảm ơn chúa :-)), vì vậy 90% các trò chơi với các phương tiện bên trong cảm thấy không thật với tôi (mặc dù có thể có động cơ vật lý thực sự tốt). Tôi đã nói chuyện với một vài người về điều này, và có vẻ như bạn 'nhận được' các trò chơi đua xe, hoặc bạn thì không. Với rất nhiều thực hành, tôi đã xoay sở để đạt được một nửa tốt trong một số trò chơi (ví dụ từ loạt Need for Speed), bằng cách lái xe rất thận trọng, phanh rất nhiều (và thường bị chuột rút ở ngón tay).

Bạn có thể làm gì với tư cách là nhà phát triển trò chơi để ngăn chặn thảm họa cộng hưởng quá mức, và khiến cảm giác lái phải không? (Đối với một trò chơi đua xe thông thường, điều đó không phấn đấu cho vật lý thực tế 100%)

Tôi cũng tự hỏi những trò chơi như Super Mario Kart chính xác làm gì khác nhau để chúng không có quá nhiều thứ vượt trội?

Tôi đoán một vấn đề là nếu bạn chơi với bàn phím hoặc màn hình cảm ứng (nhưng không phải bánh xe và bàn đạp), bạn chỉ có đầu vào kỹ thuật số: nhấn ga hoặc không, lái trái / phải hay không, và khó hơn nhiều để điều khiển một cách thích hợp tốc độ nhất định. Một điều khác là bạn có thể không có ý thức tốt về tốc độ và lái xe nhanh hơn nhiều so với thực tế. Từ đỉnh đầu của tôi, một giải pháp có thể là thay đổi phản ứng lái với tốc độ.


3
Bạn cũng cần xem xét đối tượng mục tiêu của bạn là ai. Nếu đó là những người đam mê lái xe, bạn sẽ chỉ xa lánh họ bằng cách 'sửa chữa' thực tế. Bạn có thể không đua xe, và không hiểu rằng ở tốc độ cao của một cuộc đua, vấn đề bạn gặp phải là một vấn đề rất thực tế đối với những người lái xe đua thực sự. 'Khắc phục' thực sự là bình thường hơn, và đó là những gì Mario Kart đang làm khác đi. Họ lỏng lẻo hơn với vật lý và không mô hình hóa các lực cần thiết để tạo ra đuôi cá, và do đó không gây hứng thú cho những người hâm mộ trò chơi lái xe khó tính.
DampeS8N

Tôi không biết bạn có quyền truy cập dễ dàng như thế nào, nhưng nghĩ rằng nó có thể giúp ích. Tôi đã chơi một trò chơi PSX cách đây rất lâu được gọi là Công thức Một .. họ đã tạo ra một vài trong số đó nhưng đó là trò chơi đầu tiên. Dù sao nó cũng là một mô phỏng, nhưng các tùy chọn có các tùy chọn hỗ trợ lái và ngắt với một thanh trượt mà bạn có thể tăng hoặc giảm. Vì vậy, nếu bạn có hỗ trợ phá vỡ rất cao, chẳng hạn, chiếc xe của bạn sẽ tự động bị hỏng nếu nó rẽ quá nhanh và nó cũng sẽ điều khiển bạn (tùy thuộc vào mức độ bạn muốn hỗ trợ), vì vậy bạn có thể muốn kiểm tra Đó là một giải pháp.
phường

Câu trả lời:


7

Một giải pháp sẽ là gian lận một chút và đoán xem người chơi muốn làm gì. Khi người chơi ở trên một đoạn thẳng và nhấn trái, bạn có thể cho rằng anh ta muốn chuyển làn. Khi anh ta ở gần một đường cong hoặc ngã tư, anh ta chắc chắn muốn rẽ. Người chơi không thể điều khiển góc lái chính xác của nó theo một đường cong, vì vậy bạn có thể quyết định mang đến cho người chơi lợi ích của sự nghi ngờ và luôn để anh ta lái xe qua những đường cong ở góc lý tưởng khi anh ta nhấn nút rẽ vào đúng thời điểm (miễn là hết sức có thể - bất kỳ người chơi nào cố gắng lái xe qua một đường cong kẹp tóc với 200 km / h đều đáng bị trừng phạt bằng một chuyến bay ngắn trên cỏ).

Điều này, tất nhiên, có thể trở nên khó khăn khi người chơi thực sự muốn quay đầu trên một đoạn thẳng hoặc thực sự muốn chuyển làn đường ngay trước một giao lộ.

Một giải pháp khác là có một sự khác biệt giữa gõ phím và giữ phím. Người chơi giữ phím xoay càng lâu thì góc quay càng cao. Điều này thậm chí không cảm thấy không thực tế, bởi vì khi bạn có vô lăng, bạn cần có thời gian để xoay hết cỡ.

Chỉnh sửa: Trên màn hình cảm ứng, bạn có thể sử dụng thanh trượt thay vì các nút để điều khiển lái và tốc độ theo cách tương tự. Khi màn hình nhạy cảm với áp lực, bạn cũng có thể giải thích áp lực (nhưng đưa ra phản hồi trực quan về áp suất tối đa, hoặc người chơi quá nhiệt tình có thể phá vỡ màn hình của họ). Khi thiết bị có cảm biến định hướng, bạn có thể sử dụng độ nghiêng của thiết bị để điều khiển lái.


Cảm ơn bạn đã sửa chữa, @kotekzot. Nhưng bạn có thể đề xuất chỉnh sửa cho người khác đăng bài trực tiếp mà không cần phải hỏi họ.
Philipp

ý tưởng của bạn là tốt. Khi nhấn nút bên phải (0/1), nó sẽ xoay chiếc xe với một góc phụ thuộc vào đường cong. Đúng như khi bạn lái xe: bạn nói 'tôi rẽ trái' (0/1) nhưng thực tế bạn sẽ quay vô lăng nhiều hay ít tùy theo độ dốc. Và cũng có một điều đáng nói: góc độ dần thay đổi, không đột ngột.
GameAlchemist

0

Tôi đã bắt gặp câu hỏi (cũ) này trong khi nghiên cứu những trò chơi khác ngoài Grand Theft Auto IV và V đã triển khai, nhưng tôi có một câu trả lời hợp lý để đạt được sự kiểm soát quá mức. Tôi chỉ có một số kinh nghiệm loay hoay với mô hình lái xe trong Grand Theft Auto V, nhưng thông tin này nên được áp dụng cho hầu hết các mô hình lái xe hơi thực tế.

Điều dường như xảy ra trong hầu hết các trò chơi lái xe, là đầu ra lái xe hơi được liên kết trực tiếp với đầu vào của người chơi - ngay cả khi một số loại làm mịn (tạm thời) được sử dụng. Điều này gây ra cảm giác chậm chạp hoặc cảm giác giật - và chiếc xe không tự sửa sau khi buông tay điều khiển. Điều này trái ngược với một chiếc xe thật, nơi chiếc xe có xu hướng tập trung vào chính nó sau khi giải phóng lực lên bánh xe. Một số trò chơi cố gắng khắc phục điều này bằng cách thay đổi mô hình xử lý của chúng hoặc có các mô hình xử lý arcade.

Những gì có thể được quan sát trong Grand Theft Auto V, là đầu vào lái của người dùng không được liên kết trực tiếp với đầu ra lái. Chiếc xe tự lái, hướng tới véc tơ vận tốc hiện tại của nó. Điều này có thể nhìn thấy khi buộc một tình huống lái quá nhẹ và quan sát các bánh xe được điều khiển - không có bất kỳ đầu vào nào, họ tự phản công. Bất kỳ đầu vào của người dùng sau đó sẽ được thêm vào đầu các chỉnh sửa "tự nhiên" này.

Tuy nhiên, một nhược điểm của phương pháp này là chiếc xe có cảm giác quá dính và hơi cứng đầu khi đi vào đường trượt hoặc trôi - vì vậy giá trị đối trọng này có thể bị giới hạn ở một số góc.

Lý thuyết này có thể được xác minh bằng cách thực hiện lại hệ thống lái và so sánh nó với hành vi ban đầu.

  • Khi liên kết đầu vào trực tiếp với đầu ra, chiếc xe thực sự rất khó điều khiển, ngay cả khi đã áp dụng bộ giới hạn đầu vào lái dựa trên tốc độ.
  • Khi thêm vào đối tác tự nhiên, hành vi gần giống với cách thực hiện của trò chơi, nhưng xe hơi "quá" ổn định.
  • Khi thêm giới hạn 15 độ vào đối tác, hành vi gần như giống hệt nhau.

Một điều cần lưu ý là Grand Theft Auto V được coi là "lý tưởng" ở đây - mặc dù tôi chưa tìm thấy bất kỳ trò chơi nào khác thực hiện hệ thống này.

Nếu bạn tò mò về một số mã, đây là một đoạn thực hiện của tôi.

// Returns in radians
float Racer_calculateDesiredHeading(float steeringMax, float desiredHeading,
    float reduction) {
    desiredHeading *= reduction;
    float correction = desiredHeading;

    // Get the relative velocity vector
    Vector3 speedVector = ENTITY::GET_ENTITY_SPEED_VECTOR(vehicle, true);
    if (abs(speedVector.y) > 3.0f) {
        // Simplify it to an angle
        Vector3 target = Normalize(speedVector);
        float travelDir = atan2(target.y, target.x) - static_cast<float>(M_PI) / 2.0f;
        if (travelDir > static_cast<float>(M_PI) / 2.0f) {
            travelDir -= static_cast<float>(M_PI);
        }
        if (travelDir < -static_cast<float>(M_PI) / 2.0f) {
            travelDir += static_cast<float>(M_PI);
        }
        // Correct for reverse
        travelDir *= sgn(speedVector.y);

        // Limit to some degree, R* uses 15 degrees
        travelDir = std::clamp(travelDir, deg2rad(-15.0f), deg2rad(15.0f));

        // User input deviation
        correction = travelDir + desiredHeading;
    }

    return std::clamp(correction, -steeringMax, steeringMax);
}
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.