2010-11-15 33 views
12

Làm cách nào để sử dụng Cython làm ngôn ngữ lập trình chính cho trò chơi?Sử dụng Cython để phát triển trò chơi?

Tôi là một lập trình viên có kinh nghiệm Python và tôi hoàn toàn thích nó, nhưng tôi thừa nhận là một người mới khi nói đến lập trình trò chơi cụ thể. Tôi biết rằng điển hình Python được coi là quá chậm để làm bất kỳ chương trình trò chơi nghiêm trọng, đó là lý do tại sao Cython là thú vị với tôi. Với Cython tôi có thể sử dụng ngôn ngữ giống như Python với tốc độ C.

Tôi hiểu rằng có lẽ tôi sẽ cần học một chút C/C++, nhưng có vẻ như Cython sẽ tăng tốc thời gian phát triển bit so sánh.

Vì vậy, có thực tế không? Và tôi vẫn có thể sử dụng các thư viện C/C++ như OpenGL, OpenAL và Bullet Physics?

+0

http://docs.cython.org/src/userguide/external_C_code.html –

+0

Nó phụ thuộc rất nhiều vào việc trò chơi của bạn là tic-tac-toe hay người bắn súng đầu tiên ... ;-) –

Trả lời

15

Nếu bạn đang làm việc với sự kết hợp như vậy và mục tiêu của bạn là viết trò chơi 3D, bạn có thể tận dụng tối đa công cụ 3D được tạo sẵn với vật lý và âm thanh trưởng thành và API Python như OGRE 3D (Python-OGRE) hoặc Panda3D. Ngay cả khi bạn không, bài đăng này về using Cython with Panda3D có thể hữu ích.

Tôi không chắc chắn về bây giờ, nhưng back in 2007, thương mại-off giữa hai là về cơ bản rằng:

  • Panda3D được tốt hơn các tài liệu và thiết kế từ mặt đất lên là một C++ tăng tốc Python động cơ (dường như họ đã thực hiện một số quyết định thiết kế API không xảy ra với các dự án động cơ C++) và, có thể dự đoán, có một API Python trưởng thành hơn.
  • PyOgre được xây dựng trên một động cơ tiên tiến hơn và có một cộng đồng lớn hơn và sôi động hơn.

... tuy nhiên, có thể đã thay đổi, cho rằng, qua một khoảng thời gian sang một bên, vào năm 2007, Panda3D vẫn còn trong giấy phép không tương thích với GPL và điều này đã khiến rất nhiều người bỏ đi. (Bản thân tôi có)

+0

+1 cho quản lý để đưa ra một câu trả lời có khả năng hữu ích cho câu hỏi này. Tôi nghĩ đó là vô vọng. –

+3

Như một lưu ý, Python-Ogre hiện đã chết khá nhiều, đặc biệt là kể từ khi trang web hoàn toàn biến mất :-( –

5

Tôi đã tìm thấy rất nhiều thời gian, đặc biệt là đối với thư viện lớn hơn, bạn sẽ tốn rất nhiều thời gian chỉ cần cấu hình dự án Cython để xây dựng, biết cấu trúc nào cần nhập, nối mã C vào Python Trong khi Cython là một stopgap tốt đẹp (và đáng kể dễ chịu hơn so với phát triển C/C++ thuần túy), lượng C++ bạn phải học để sử dụng hiệu quả nó về cơ bản có nghĩa là bạn sẽ phải cắn viên đạn và hãy học C++.

Còn PyGame thì sao?

-1

Chủ đề !!! Một trò chơi hiện đại tốt phải sử dụng đề tài. Cython thực tế cấm sử dụng của chúng, giữ cho GIL (khóa thông dịch toàn cầu) toàn bộ thời gian, làm cho mã của bạn chạy theo trình tự.

Nếu bạn không viết một trò chơi lớn, hơn Python/Cython thì không sao. Nhưng Cython là không tốt như một ngôn ngữ hiện đại mà không có hỗ trợ thread tốt.

+1

Nếu mã của bạn không chạm vào các đối tượng Python, bạn có thể giải phóng GIL trong các khối không có khối. Ngày nay, Cython có các mảng bản địa, vì vậy bạn có thể làm khá nhiều mà không cần chạm vào các đối tượng Python. – Winterstream

6

vào ngày này (ngày 12 tháng 4 năm 2011) unixmab83 là sai.

Cython không cấm sử dụng luồng, bạn chỉ cần sử dụng các câu lệnh đặc biệt no_gil.

Bên cạnh các liên kết của C++ hiện đang hoạt động trong cython.

Chúng tôi sử dụng nó cho một thứ gần gamedev. Vì vậy, trong khi tôi không thể là cuối cùng về điều này, cython là một ứng cử viên hợp lệ.

7

Tôi là nhà phát triển cho số Ignifuga Game Engine, theo định dạng 2D và Python/Cython/SDL. Những gì tôi thường làm là phát triển mã trong Python, và sau đó cấu hình công cụ để xem liệu có một số tắc nghẽn rõ ràng (vòng lặp chính, mã kết xuất là các ứng cử viên tốt) và chuyển đổi các mô-đun đó sang Cython. Sau đó tôi chạy tất cả các mã (Python và Cython dựa) thông qua Cython, và biên dịch nó tĩnh với SDL. Một "điểm cộng" lớn của Cython là ràng buộc với SDL, hoặc bất kỳ thư viện dựa trên C nào, gần như là tầm thường. Về các chủ đề, động cơ hiện đang là luồng đơn với đa nhiệm hợp tác qua Greenlets, mặc dù điều này xuất phát từ một quyết định thiết kế để giảm thiểu các tiềm năng đa luồng mà các nhà phát triển không có kinh nghiệm có thể rơi vào, thay vì giới hạn về phần của Cython.

0

Tôi biết Cython và bạn không cần phải biết C/C++. Bạn sẽ sử dụng gõ tĩnh nhưng rất dễ dàng. Phần khó khăn nhất là làm cho công việc biên dịch hoạt động, tôi nghĩ trên Windows, điều này được thực hiện trên điều studio trực quan. Có một cái gì đó giống như một thư viện chuẩn bao gồm toán học chẳng hạn. Tốc độ tăng không quá lớn nhưng điều này phụ thuộc vào phạm vi của bạn. ctypes nhanh hơn nhiều (thuần C) nhưng kết nối tới Python rất chậm nên tôi quyết định tìm Cython mà vẫn có thể động.

Để tăng tốc độ trong trò chơi Cython sẽ là lựa chọn đúng nhưng tôi sẽ đặt tên hiệu suất này cũng bị giới hạn.

Các vấn đề liên quan