2009-11-23 7 views
6

Szukam dobrej struktury graficznej, aby stworzyć ładną grę 2D w Ruby. Zrobiłem 3 bardzo prosty test, aby zobaczyć, który graficzny framework Ruby jest szybszy między Gosu i Rubygame. Test tworzy 1000 wystąpień klasy "Kwadrat", które poruszają się i rysują czerwony kwadrat najprostszą metodą za pomocą metody ramowej. Trzeci test to to samo, ale w czystej implementacji OpenGL (bez żadnej struktury). Oto wyniki:Dlaczego rubygame i gosu są wolniejsze niż czysty opengl?

PURE OPENGL (stosując rubinowy OpenGL) 80Fps: alt text http://grab.by/JTM

gusu (stosując rubinowy-OpenGL + gusu) 46Fps: alt text http://grab.by/JTC

RUBYGAME (stosując rubinowy OpenGL + rubygame + rsdl) 32FPS: alt text http://grab.by/JTw

Dlaczego istnieje tak duża różnica w fps między czystym testem OpenGL a testem Rubygame lub Gosu? (czy oba używają opengl)

Czy te ramy są naprawdę niezawodne, czy też istnieją lepsze ramy, z których powinienem skorzystać? (Nie widzę siebie przechodzenia przez cały proces ładowania obrazów i czcionek w czystym OpenGL: p)

Jaka jest Twoja opinia?

Odpowiedz

5

Podczas korzystania z frameworka, wszelkie ramy do uproszczenia i przyspieszenia rozwoju natychmiast pociąga za sobą spadek wydajności. OpenGL jest dobrą i szybką biblioteką, ale kiedy otoczysz ją językiem wysokiego poziomu i frameworkiem takim jak Ruby, możesz absolutnie oczekiwać spowolnienia. OpenGL jest wciąż szybki, twoje spowolnienie pochodzi z nadmiaru tego, co dzieje się wewnątrz tych frameworków. Mimo to 46 fps nie wydaje się być zbyt złe, ale jeśli zamierzasz podkreślić silnik znacznie bardziej niż twój przykład, możesz skończyć z grą, której nie można odtworzyć.

+1

Zgadzam się, ale luka jest ogromna :) Czy istnieje lepszy framework do robienia grafiki 2d (lub 3d) w czasie rzeczywistym na ruby? – XPac27

0

Jeśli to kara za korzystanie z frameworka, zastanawiam się, jaka jest kara za faktyczną implementację logiki gry ... Moje nadzieje na wykorzystanie Ruby dla gamedev są coraz mniejsze.

+0

Często zdarza się, że framework wykonuje dla ciebie dużo pracy, którą sam musisz wykonać. Pojawi się więc pierwsze spowolnienie, ale kiedy zaczniesz dodawać kod gry, możesz nie dostrzegać większego spowolnienia, ponieważ efektywnie używa frameworka do wykonywania zadań. – Kylotan

+0

Chcesz przenieść na raz 1000 obrazów na raz? nawet jeśli to zrobisz, nadal otrzymasz 45 FPS. To wcale nie jest złe. – horseyguy

0

Czy używasz YARV? Powinieneś wypróbować alternatywną implementację ruby, taką jak jruby lub rubinius.

+0

Nie, używam ruby ​​1.8.1 (mac). Ale wygląda na to, że jest to najlepsze rozwiązanie: http://programmingzen.com/2010/07/19/the-great-ruby-shootout-july-2010/ Może problem wynika z faktu, że Rubygame jest oparty na SDL. – XPac27

+1

Jeśli używasz komputera Mac, zajrzyj na http://www.macruby.org/. – mk12

2

Właśnie wykonałem kwadratowy projekt przy użyciu Ruby 1.9.2 i Gosu. Na moim MacBooku Pro udało mi się uzyskać 1000 pól i 60 klatek na sekundę bez problemów z wydajnością. Używając eval do rozwinięcia mojej tablicy obiektów uzyskałem 4000 kwadratów przy 60 fps. Kwadraty mają losową prędkość i odbijają się od krawędzi monitora.

Powiązane problemy