2009-11-23 36 views
6

Tôi đang tìm một khung hình đồ họa tốt để tạo một trò chơi 2D đẹp mắt trong Ruby. Tôi đã thực hiện 3 thử nghiệm rất đơn giản để xem khung công tác đồ họa Ruby nào nhanh hơn giữa GosuRubygame. Bài kiểm tra tạo 1000 trường hợp của một lớp "Square" di chuyển và vẽ một hình vuông màu đỏ theo cách đơn giản nhất bằng cách sử dụng phương thức của khung công tác. Bài kiểm tra thứ 3 là điều tương tự nhưng trong một triển khai OpenGL thuần túy (không có bất kỳ khung công tác nào). Dưới đây là kết quả:Tại sao rubygame và gosu chậm hơn opengl tinh khiết?

PURE OPENGL (sử dụng ruby-OpenGL) 80Fps: alt text http://grab.by/JTM

Gosu (sử dụng ruby-OpenGL + Gosu) 46Fps: alt text http://grab.by/JTC

RUBYGAME (sử dụng ruby-OpenGL + rubygame + rsdl) 32Fps: alt text http://grab.by/JTw

Tại sao có sự khác biệt lớn giữa thử nghiệm OpenGL thuần túy và thử nghiệm Rubygame hoặc Gosu? (cả hai đều sử dụng opengl)

Những khuôn khổ đó có thực sự đáng tin cậy hoặc có khuôn khổ tốt hơn tôi nên sử dụng không? (Tôi không thấy bản thân mình trải qua toàn bộ quá trình tải hình ảnh và phông chữ trong OpenGL tinh khiết: p)

Ý kiến ​​của bạn là gì?

Trả lời

5

Khi bạn sử dụng khung làm việc, mọi khung làm việc để đơn giản hóa và tăng tốc độ phát triển, bạn ngay lập tức phải chịu một hình phạt về hiệu suất. OpenGL là một thư viện tốt và nhanh nhưng khi bạn gói nó với một ngôn ngữ cấp cao và khung như Ruby bạn hoàn toàn có thể mong đợi một chậm lại. OpenGL vẫn còn nhanh, sự chậm chạp của bạn đến từ phía trên đầu của bất cứ điều gì đang xảy ra bên trong các khung công tác đó. Tuy nhiên, 46 khung hình/giây dường như không quá tệ nhưng nếu bạn sẽ nhấn mạnh động cơ nhiều hơn ví dụ của bạn, bạn có thể kết thúc với một trò chơi không thể chơi được.

+1

Tôi đồng ý nhưng khoảng cách rất lớn :) Có khung làm việc tốt hơn để làm đồ họa 2d (hoặc 3d) trong thời gian thực trên ruby ​​không? – XPac27

0

Nếu đó là hình phạt của việc sử dụng khung, tôi tự hỏi hình phạt là gì khi thực sự thực hiện logic trò chơi ... Tôi hy vọng sử dụng Ruby cho gamedev đang chìm nhanh hơn.

+0

Nó khá phổ biến cho một khuôn khổ để được làm rất nhiều công việc cho bạn mà bạn cần phải làm cho mình. Vì vậy, bạn sẽ thấy một sự suy giảm ban đầu như thế này, nhưng khi bạn bắt đầu thêm mã trò chơi của bạn, bạn có thể không thấy chậm hơn nữa vì nó sử dụng hiệu quả khung công tác để hoàn thành công việc. – Kylotan

+0

Bạn muốn di chuyển 1000 hình ảnh trên màn hình cùng một lúc? ngay cả khi bạn làm bạn vẫn sẽ nhận được 45 FPS. Đó không phải là xấu cả. – horseyguy

0

Bạn đang sử dụng YARV? Bạn nên thử thực hiện ruby ​​thay thế, như jruby hoặc rubinius.

+0

Không, tôi đang sử dụng ruby ​​1.8.1 (mac). Nhưng có vẻ như đó là giải pháp tốt nhất: http://programmingzen.com/2010/07/19/the-great-ruby-shootout-july-2010/ Có thể vấn đề xuất phát từ thực tế là Rubygame dựa trên SDL. – XPac27

+1

Nếu bạn đang sử dụng máy Mac, hãy xem http://www.macruby.org/. – mk12

2

Tôi vừa tạo một dự án hình vuông bằng Ruby 1.9.2 và Gosu. Tôi đã có thể nhận được 1000 hình vuông và 60 khung hình/giây mà không có vấn đề hiệu suất trên MacBook Pro của tôi. Sử dụng eval để unroll mảng đối tượng của tôi tôi có 4000 hình vuông ở 60 khung hình/giây. Các hình vuông có tốc độ ngẫu nhiên và thoát ra khỏi cạnh của màn hình.

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