Một đơn giản hóa phổ biến là thu gọn 3D thành 2D. Mặc dù kết xuất và vật lý có thể thực sự là 3D, logic đưa ra quyết định không cần phải đối xử bình đẳng với cả ba trục. Các bản nhạc MotoGP có vài ngọn đồi, vì vậy AI của chúng tôi đã có thể bỏ qua thành phần y.
Tiếp theo, chúng tôi đã chuyển từ tọa độ cartesian x / z sang hệ thống theo dõi tương đối. Vị trí được đại diện bởi một cặp giá trị:
int distance = khoảng cách bao quanh đường đua, được lưu trữ ở định dạng 16.16 điểm cố định
- 0 = vạch xuất phát
- 0x8000 = nửa vòng
- 0x10000 = lặp lại từ đầu
- 0x1C000 = ba phần tư chặng đường qua vòng thứ hai
float cross = khoảng cách ngang qua đường 0 = trên đường trung tâm
- -1 = cạnh trái của bề mặt đua
- 1 = cạnh phải của bề mặt đua
Để chuyển đổi giữa tọa độ này và tọa độ cartesian được sử dụng bởi mã vật lý và mã kết xuất của chúng tôi, chúng tôi đã lưu trữ một danh sách các phân đoạn xác định hình dạng của bề mặt đua: struct TrackSegment {Vector CenterPoint; float Khoảng cáchLeftEdge; float Khoảng cáchRightEdge; }
Chúng tôi đã tạo ra hàng trăm cấu trúc này, cách đều nhau trên đường đua, bằng cách kết hợp các đường cong Bezier mà từ đó các bản nhạc được tạo ra ban đầu. Điều này đã cho chúng tôi đủ thông tin để viết các hàm chuyển đổi tọa độ cần thiết.
Với tọa độ theo dõi, nhiều phép tính hữu ích trở nên đơn giản:
if (abs(cross) > 1)
// You are off the track and should steer back toward the center line
if (this.distance > other.distance)
// You are ahead of the other player (even though you may be
// physically behind in 3D space if you have lapped them)
short difference = (short)(this.distance - other.distance);
if (abs(difference) < threshold)
// These two bikes are physically close together,
// so we should run obstacle avoidance checks
Do định dạng dữ liệu điểm cố định, việc truyền bộ đếm khoảng cách từ 32 đến 16 bit là một cách dễ dàng để loại bỏ số vòng đua, vì vậy chúng tôi có thể chọn và chọn tính toán nào được quan tâm nếu hai chiếc xe đạp nằm trên các vòng đua khác nhau, thay vì muốn biết liệu chúng có đã gần trong không gian vật lý. Nhờ vào sự kỳ diệu của lời khen của hai người, coi sự khác biệt như 16 bit đã ký cho khoảng cách ngắn nhất bất kể xe đạp nào ở phía trước (hãy nhớ rằng trong hệ thống số học modulo như đường đua vòng có hai khoảng cách có thể, như bạn có thể đo được hoặc hướng xung quanh theo dõi). Điều này hoạt động ngay cả khi hai chiếc xe đạp ở hai bên đối diện của vạch xuất phát, một tình huống sẽ yêu cầu logic trường hợp đặc biệt dễ bị lỗi trong hầu hết các hệ tọa độ khác.
Làm phẳng và làm thẳng khu vực chơi trò chơi ảo này giúp dễ dàng suy luận về những điều như "tôi có trên đường đua không?" hoặc "Tôi đang đi nhanh phía sau chiếc xe đạp khác này: tôi có nhiều chỗ hơn để vượt qua chúng ở bên trái hay bên phải không?" đó sẽ là khó khăn để thực hiện trong một không gian thế giới 3D đầy đủ. Khi chúng tôi quyết định chuyển sang bên trái, chúng tôi sẽ chuyển đổi tọa độ theo dõi kết quả trở lại vào không gian thế giới, tại đó độ cong của đường đua được tính đến, cho thấy cách chúng tôi nên điều khiển để hoàn thành mục tiêu đã chọn.