2009-08-24 11 views
10

Tôi là nhà phát triển C# nhiều nhất. Trở lại đại học Tôi đã có các lớp học trên C/C++ vì vậy tôi "biết C" và đó là một đoạn tốt lý do tôi là một nhà phát triển C#.Làm thế nào để bạn bắt đầu khi cố gắng hiểu mã của một công cụ trò chơi 3D (như id Tech 3)?

Tuy nhiên tôi chưa bao giờ có cơ hội viết mã trong C/C++ một cách chuyên nghiệp và tôi muốn nghiên cứu cách một công cụ trò chơi hiện đại hoạt động cùng với cách hoạt động của ứng dụng C/C++.

Vấn đề là, tôi không biết bắt đầu từ đâu. Như trong, tôi đã tải về động cơ Quake 3 source code (đã được ghi lại id Tech 3) và tôi thậm chí không chắc chắn bắt đầu từ đâu.

Làm thế nào một C#/WinForms có thể tấn công một bộ mã hóa C lớn như id Tech 3 hoặc một số động cơ AAA lớn khác?

+2

Chỉ cần thông tin: Nguồn Quake 3 là "khủng khiếp" btw nếu bạn quan tâm đến mã sạch đẹp. Ý tôi là nó hoạt động, rất hiệu quả. Nhưng thực sự, khủng khiếp của nó, như hầu hết các mã trò chơi sản xuất là. Điều đó nói rằng tôi chỉ cần nhảy vào và làm "một cái gì đó" - cá nhân tôi không thể hiểu được mã chỉ bằng cách nhìn chằm chằm vào nó. – Justicle

+0

Vâng, tôi ít quan tâm đến mã sạch hơn và quan tâm hơn đến cách các công cụ trò chơi 3D hiện đại hoạt động. Ngay cả khi cách họ làm mọi thứ trong Quake 3 là cổ, đó là sự khởi đầu –

Trả lời

12

Cố gắng làm chương trình "Hello World" 3d đơn giản nhất sử dụng tập con cơ bản nhất của động cơ. Điều đó có thể sẽ dạy bạn tải.

Với các cơ sở mã lớn, tốt nhất là không nên thử tìm hiểu mọi thứ cùng một lúc. Chỉ cần đi sâu vào với một câu hỏi rất cụ thể mà bạn cần phải trả lời cho chính mình (hoặc có thể tìm kiếm trên internet), hoặc một nhiệm vụ rất cụ thể mà bạn cần phải hoàn thành. Cách tiếp cận này cung cấp cho bạn mục đích và động lực bạn cần để thực sự làm một số chương trình. Việc học sẽ tự đến.

+0

+1 Tuyệt đối - giống như ngày đầu tiên trong một công việc mã hóa mới, điều tốt nhất là nhảy vào và bắt đầu sửa lỗi - bạn sớm tìm ra mọi thứ bạn cần phải biết. – Justicle

4

Viết mod sẽ là điểm khởi đầu tốt.

Bắt đầu trên lãnh thổ được xếp hạng: Trò chơi vani. Thay đổi nội dung. Nhìn vào mã trả lựu đạn. Làm cho nó bị trả lại hơn nữa. Thêm dự đoán phía máy khách (mà các dự án không bouncy đã có).

Thêm vũ khí dịch chuyển. Nó sẽ cho bạn biết thêm về phát hiện va chạm mà bạn muốn biết.

Có một vài chức năng chính xử lý hầu hết các trò chơi: Xuất khẩu động cơ, lệnh trap_ * gọi. Nó có thể giúp rất nhiều để biết chính xác những gì mod đang làm với họ trước khi mở mã động cơ và xem xét việc thực hiện của họ. Ví dụ, nó có thể cho bạn biết thêm về động cơ để biết rằng bạn cần gọi LinkEntity mỗi khi thực thể di chuyển hoặc vị trí của nó trong cây BSP trò chơi không được cập nhật và các cuộc gọi động cơ tiếp theo có thể bỏ qua nó, hơn là biết chính xác cây được lưu trữ và truy cập như thế nào.

1

Chỉ trong trường hợp bạn đang tìm kiếm game engine 3D khác và có lẽ có thể muốn so sánh chúng với nhau, xem dim3:

http://code.google.com/p/dim3/

3

này nghe có vẻ giống như một trò đùa, nhưng: tìm ra main() chức năng. Đó là điểm khởi đầu được xác định rõ ràng của việc thực hiện chương trình, và bạn sẽ có thể theo dõi mọi thứ từ đó.

Điều này sẽ giúp bạn tìm ra hệ thống phụ phụ thuộc vào đó, vì thứ tự khởi tạo của chúng thường sẽ từ dưới lên. Ví dụ, một công cụ điển hình sẽ khởi tạo bộ nhớ của nó, gỡ lỗi và truy tìm hệ thống con sớm, vì hầu hết các hệ thống khác cần các dịch vụ đó để hoạt động.

Bạn cũng có thể tìm ra cách vào vòng lặp chính của trò chơi và hiểu những gì cần thiết trước khi vòng lặp được kiểm soát.

+0

Điều này liên quan đến sự thiếu kinh nghiệm của tôi với các chương trình Windows C++ - Tôi đã tìm thấy hàm WinMain nhưng không rõ nó hoạt động như thế nào. Tôi đoán đã đến lúc bắt đầu bước qua ... –

1

Andre LaMothe khá nhiều đã dạy tôi mọi thứ tôi biết về lập trình trò chơi. Một khi bạn nhận được thông qua hai cuốn sách, bạn sẽ khá nhiều biết tất cả mọi thứ bạn cần biết về động cơ 3d.

  1. Tricks of the Windows Game Programming Gurus
  2. Tricks of the 3D Game Programming Gurus - Advanced 3D Graphics and Rasterization

Nếu không, chỉ cần thử văn bản động cơ nhỏ của riêng bạn cho vui, xem như thế nào đến nay bạn nhận được, những gì bạn đang thiếu, và bạn sẽ sớm bắt đầu để hiểu được mục đích của mã khác mà bạn đang xem,

Cũng có thể muốn thử xem NeHe Gamedev Tutorials.

0

Tôi chưa bao giờ là người hâm mộ lớn đọc một sản phẩm hoàn chỉnh lớn. Và đặc biệt là cơ sở mã Quake. Có điều tốt bạn có thể học hỏi từ nó cho chắc chắn nhưng nó không phải là điểm khởi đầu của bạn. Trước tiên bạn cần tìm hiểu một số khái niệm mới được sử dụng trong lập trình trò chơi.

Tôi sẽ đề nghị đặt C++ một chút ở trạng thái giữ (nếu bạn muốn tạo trò chơi, bạn thực sự cần quay trở lại vào thời điểm nào đó) nhưng bây giờ hãy cài đặt XNA. Nó là một Framework tuyệt vời như mọi thứ .NET. Đây là rất nhiều hướng dẫn về game XNA.