Czy skrypty powinny współdziałać z abstrakcją silnika?

10

Korzystam z Javy i Jython, a po przeprowadzonych badaniach odkryłem, że bezpośrednie skrypty dostępu do interfejsu silnika mogą być błędem, ponieważ ściśle łączą je ze sobą.

Wygląda na to, że większość skryptów, które pozwalają modom tworzyć i zarządzać jednostkami, robi to poprzez pewien rodzaj abstrakcji. Czy te abstrakcje istnieją z tego powodu, czy może mają one zapewnić bardziej intuicyjny sposób modyfikowania gry przez osoby niebędące programistami?

Vaillancourt
źródło

Odpowiedzi:

7

Oba ogólnie. Twoje skrypty powinny komunikować się z abstrakcyjną - lub przynajmniej pośrednią - warstwą funkcjonalności, a nie z samym silnikiem.

Po pierwsze, zapewnia to dodatkową kontrolę i bezpieczeństwo. Pozwala na łatwe, czyste zdefiniowanie interfejsu, który skrypt może mieć w grze, a tym samym na czym może się zmagać, a także pozwala na umieszczenie dodatkowych kontroli bezpieczeństwa na poziomie pośrednim, które niekoniecznie byłyby odpowiednie w sama warstwa funkcjonalna.

Po drugie, pozwala uprościć interfejs narażony na skrypty, aby był bardziej przyjazny dla programistów lub ogólnie łatwiejszy w użyciu.

Zapewnia trochę izolacji przed sprzężeniem między nimi, ale często nie jest to nic wielkiego, ponieważ skrypty zawsze będą sprzężone z interfejsami, z którymi mogą wchodzić w interakcje, z samej swojej natury. Pozostałe dwa punkty są znacznie bardziej korzystne.


źródło
3

Myślę też, że to pomaga w przypadku, gdy chcesz dokonać modyfikacji silnika. Możesz to zrobić bez obawy o zmianę wszystkich skryptów od czasu zmiany silnika. Musisz tylko zmienić warstwę abstrakcji, o której wspominał Josh.

Elie Haddad
źródło
1

Moim zdaniem konieczne jest utworzenie warstwy między rdzeniem gry a skryptami służącymi do tworzenia modyfikacji.

Korzystając z tej metody, zyskujesz kilka zalet:

Łatwiej dla modderów:
Dobrym powodem do tego jest, jak wspomniałeś, łatwiejszy sposób tworzenia modów. Pisanie mniej wierszy kodu oznacza większą czytelność i minimalizuje problemy ze zrozumieniem dla początkujących programistów. Idealnie, ten interfejs API powinien być zbiorem metod zmiany czegoś na wysokim poziomie gry . Oznacza to na przykład: Odrodzenie istoty bez wiedzy o tym, jak naprawdę się ona odradza , lub wyświetlenie obrazu za pomocą jednego wywołania, które przyjmuje tylko nazwę obrazu jako parametr.
Ty, jako programista, również zyskujesz na tym, ponieważ możesz napisać więcej w krótszym czasie niż byłoby to konieczne w Javie.

Bezpieczeństwo:
Uniemożliwianie ludziom kontrolowania całej gry jest bardzo ważne. I nie obchodzi mnie, czy gra będzie pojedynczy tytuł graczem, ale zależy mi, gdy gra ma pewne działania multiplayer. Nawet jeśli jest to tylko tabela najlepszych wyników.
Inni ludzie są zawsze sfrustrowani, gdy ktoś wygrywa z powodu oszukiwania (na przykład: zmiany pozycji, a dokładniej: zmiana pozycji i bezpośrednie ograniczenie flagi). Twoim głównym zadaniem jest, aby uniemożliwić to graczom.
Pamiętaj, że oszust zawsze może dekompilować, zmieniać kod, rekompilować i grać z tym klientem, więc dodaj kontrole po stronie serwera. Ogólnie rzecz biorąc, „Bezpieczeństwo” jest tylko kolejną, nie w 100% bezpieczną opcją, która utrudnia życie oszustom.

Marco
źródło