Edytor poziomów + gra -> Duplikowanie kodu renderowania / specyficznego dla gry?

14

Czytałem o tym, jak zaprojektować kod dla gry. Jednej rzeczy, której nie byłem w stanie zrozumieć, to w jaki sposób udaje ci się napisać edytor poziomów poza grą (nie „edytor poziomów w grze”) bez „kopiowania” kodu z gry? Na przykład może być konieczne skopiowanie całego kodu dotyczącego różnych typów jednostek, które możesz mieć. Musisz dodać kod renderowania gry.

Sądzę, że można to zrobić, tworząc bibliotekę DLL z „silnika” części gry. Następnie podziel się nim między rzeczywistą grą a edytorem poziomów.

Czy jest na to lepszy / łatwiejszy sposób?

Utkarsh Sinha
źródło

Odpowiedzi:

13

Będziesz musiał rozdzielić swój kod na osobne projekty (w tym samym rozwiązaniu). Zwykle masz następującą konfigurację:

-Engine Core       (DLL)
-Game + Game Logic (EXE)
-Content Pipeline  (DLL)
-Editor            (EXE)

W przypadku jeszcze większych projektów może być konieczne rozdzielenie silnika Core na wiele projektów, takich jak Core, Fizyka, Grafika, Audio, Wejście i Sieć. Wszystkie te projekty nie mogą się nawzajem odnosić, ale wszystkie odnoszą się do Core, w którym można przechowywać niektóre typowe typy podstawowe.

Gdyby się nawzajem odnosili, rozdzielenie byłoby bezużyteczne.

W każdym razie powinno to pomóc w ponownym użyciu części silnika w innych projektach. Na przykład w przypadku edytora należy odwołać się do projektu Graphics, który odwołuje się do samego Core.

Ta separacja oznacza również, że możesz teraz korzystać z technologii Tylko Windows, takich jak WPF, w swoim edytorze, podczas gdy Twoja gra może nadal być ukierunkowana na Windows i XBLIG.

Aby uzyskać więcej informacji na temat używania XNA w środowisku WPF, zobacz ten link: http://blogs.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside- of-a-wpf-application.aspx

Roy T.
źródło
Dzięki! Trochę więcej się rozejrzałem i znalazłem to - create.msdn.com/en-US/education/catalog/sample/… - Wygląda na to, że WinForms jest obsługiwany lepiej niż WPF!
Utkarsh Sinha
Hej, to prawda, ale ta próbka pochodzi z 2008 roku, zanim WPF naprawdę zaczęła działać. Rok temu przestawiłem się z WinForm na WPF i nie chciałbym, żeby świat przeszedł z powrotem :). Jeśli chcesz zachować zgodność z tą próbką, zawsze możesz użyć WinFormsControlHost w aplikacji WPF :).
Roy T.
4

Podczas projektowania silnika gry najlepiej odseparuj logikę renderowania najlepiej od logiki gry. Jednym ze sposobów jest użycie wzorca komponentu podczas budowania silnika gry. Na przykład XNA używa tego wzorca na poziomie ramowym dla zapewnienia elastyczności. Użyj tej samej bazy kodu do renderowania w edytorze poziomów; napisz opakowania, jeśli musisz.

Podobnie, innym dość popularnym wzorcem jest MVC (Model-View-Controller), który również może pomóc. Koduj swój silnik normalnie za pomocą MVC. Następnie możesz użyć tego samego kodu dla widoku i modelu, ale wstrzyknąć niestandardowy kontroler do edycji modelu edytora poziomów zamiast kontrolera silnika gry, który aktualizuje się zgodnie z danymi wejściowymi gry. Zaimplementuj serializację modeli gier, aby załadować / zapisać je z edytora lub gry.

Trzymanie komponentów w oddzielnych zespołach oczywiście zachęci do separacji ...

XiaoChuan Yu
źródło