Endian nhỏ và lớn trong các trò chơi


16

Chúng ta có phải lo lắng về các đơn đặt hàng byte trong quá trình lập trình một trò chơi không? Các bảng điều khiển trò chơi sử dụng các đơn đặt hàng byte khác nhau?


1
Bạn có quan tâm đến một dự án cụ thể mà bạn đang làm việc ngay bây giờ hoặc chỉ nói chung? Hầu hết, nếu bạn đang viết một trò chơi cho một bảng điều khiển, bạn có thể sẽ sử dụng một số bộ công cụ được ghi chép tốt như XNA và đầu vào và đầu ra sẽ được đề cập trong tài liệu của nó.
sói

4
Nếu bạn lo lắng về điều này, tôi thực sự khuyên bạn nên sử dụng sai lầm thứ tự byte của Rob Pike - cố gắng lo lắng về thứ tự byte thường khiến bạn gặp nhiều rắc rối hơn là bỏ qua nó và viết mã thực sự độc lập về cuối.

1
Đó là một bài đọc tốt, nhưng Rob đang cho thấy rằng bạn có thể có được các bài đọc được đơn giản hóa với chi phí cần viết phức tạp hơn. Nếu bạn không phải là người viết, thật tuyệt!
Kylotan

Câu trả lời:


14

Nếu bạn đang viết mã mạng, đây thường là điều bạn phải giải quyết, vâng.

Ngoài ra, có thể thứ tự byte trong định dạng tệp không phải là thứ mà nền tảng của bạn sử dụng, vì vậy đôi khi nó cũng quan trọng ở đó.


8

Bạn có phải lo lắng về nó? Có khả năng là không. Phần lớn lập trình trò chơi sẽ ở một mức độ mà tính cuối cùng bị trừu tượng hóa. Ngay cả trong mạng, bạn gần như chắc chắn sẽ sử dụng một thư viện cho các giao thức mạng. Thật tốt khi bạn biết về nó, nhưng tôi nghi ngờ bạn sẽ gặp phải vấn đề với nó.


5

Hầu hết thời gian, không.

Endianess thường được trừu tượng hóa trong các mô-đun cấp cao của công cụ trò chơi và bạn không phải lo lắng về điều đó hàng ngày. Nếu nó không được trừu tượng hóa, thì động cơ có vấn đề nghiêm trọng và cần được khắc phục, bởi vì đây không phải là loại chi tiết bạn nên lo lắng khi làm game.

Tuy nhiên, nếu bạn đang làm việc trên một số bộ phận cấp thấp của công cụ đa nền tảng C / C ++, bạn có thể phải xử lý nó.Tất cả ba bảng điều khiển thế hệ hiện tại đều sử dụng kiến ​​trúc PowerPC, là công cụ lớn, trong khi kiến ​​trúc x86 được sử dụng trên PC là ít về cuối. Vì vậy, nếu bạn đang làm việc trên một số mã đọc byte thô từ một nơi nào đó để đặt chúng vào cấu trúc dữ liệu (tuần tự hóa nhị phân, mạng ...), thì bạn sẽ phải xử lý nó.

Ví dụ, trong C / C ++, thường thấy loại hoán đổi byte này đang hoạt động (không được kiểm tra, chào đón các chỉnh sửa):

// Assume bytes comes ordered as big-endian
u16 u16FromBytes(void* data)
{
#if BIG_ENDIAN
    return (u16(data[0]) << 8) + u16(data[1]);
#else // LITTLE_ENDIAN
    return (u16(data[1]) << 8) + u16(data[0]);
#endif
}

Một lần nữa, điều này là ổn trong mã cấp thấp, nhưng điều này không nên được sử dụng ở mọi nơi.


3

Nó phụ thuộc vào các nền tảng bạn đang nhắm mục tiêu. Ví dụ, tôi tin rằng PS3 là một sản phẩm lớn, vì vậy nếu đó là một trong những mục tiêu của bạn thì đó là điều bạn cần phải biết, vâng.

Trong không gian máy tính gia đình, "Big 3" (Windows, Linux, Mac) hoàn toàn độc quyền hoặc hoàn toàn xuất sắc trên các kiến ​​trúc Intel x86 / x64 ngày nay, vì vậy những lo ngại về tính lâu dài không còn phù hợp nữa.


Không còn phù hợp? Theo kinh nghiệm của tôi (2-3 trò chơi trên một vài công ty và 7 năm, cả hai MMO ... vì vậy, giai thoại thay vì có giá trị thống kê) mỗi thị trường PS và Xbox có kích thước gấp đôi thị trường windows, Mac là một phần nhỏ của windows và Linux nhỏ hơn đáng kể. Trừ khi trò chơi của bạn đơn giản là không thể hoạt động trên bảng điều khiển, nếu không, bạn sẽ để lại 80% lợi nhuận của mình bằng cách gắn bó với PC. Mã chéo cũng có nghĩa là máy chủ của bạn có thể ở trên các máy hoàn toàn khác với máy khách của bạn (ví dụ: mọi trò chơi bảng điều khiển máy khách-máy chủ từng có).
Mark Storer

@MarkStorer - Tôi nghĩ bạn cần đọc lại những gì tôi thực sự đã viết.
Maximus Minimus
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.