• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ocena kodu C# [Monogame]

Object Storage Arubacloud
0 głosów
435 wizyt
pytanie zadane 3 października 2017 w C# przez Kodeman Gaduła (4,480 p.)

Witam, zacząłem bawić się z w C# w Monogame i chciałbym sprawdzić, czy nie wyrobię sobie złych nawyków. Projekt jest nieduży i w bardzo wczesnej fazie, ale łatwiej się będzie czytało.

W szczególności martwi mnie, czy nie używam za dużo zmiennych publicznych i statycznych publicznych. Dzięki temu nie przekazuję zbyt wielu argumentów do funkcji co chwilę, ale nie wiem czy to najlepsze wyjście. Niedługo dojdzie pewnie do tego, że każda zmienna, związana z ewkipunkiem gracza będzie zmienną statyczną. Ale może to poprawny sposób?

https://github.com/Kodeman010/Monogame-game

Prosiłbym o jakiekolwiek rady, gdyż im wcześniej wyjdę ze złych nawyków, tym lepiej :)

1
komentarz 3 października 2017 przez rafal.budzis Szeryf (85,260 p.)

Nigdy nie rób if`ów bez klamerek. Niby dla jendolinijkowych instrukcji można tak pisać lecz nie jest to zalecane i łatwiej o błędy. 

w gameObject masz 
public Texture2D _texture;

Podkreślnik przed nazwą to dość stara konwencja nazewnicza. Jest ona stosowana do wyróżnienia pól prywatnych nie publicznych.

GameObjects jest klasą trochę bez sensu bo wiele właściwości nie jest wykorzystywanych później przez obiekty potomne czemu zrobiłeś ta klase ?

komentarz 3 października 2017 przez Kodeman Gaduła (4,480 p.)
Z GameObjects celowałem w coś w stylu w Unity, gdzie każdy obiekt ma własną funkcję Update, OnClick, dodałem jeszcze Draw. Każdy obiekt powinien być osobnym spritem, dlatego zawiera również kolizje. Kiedy rozszerzę program, to może obiekty potomne będą wykorzystywać więcej z rodzica.

Zastanawiałem się z obiektem MouseManager, gdyż on nie potrzebuje sprite'a, ale ma funkcję Update i Draw, które pasują i dzięki temu oszczędzam na kodzie (i być może czytelności). Czy teraz GameObjects ma sens, czy źle się całkowicie do tego zabrałem?

Dziękuję za resztę rad :)
1
komentarz 4 października 2017 przez rafal.budzis Szeryf (85,260 p.)
Ja bym na twoim miejscu to rozdzielił bardziej. zrobił klase GameObject który zawiera tylko deklaracje funkcji update oraz draw (abstrakcyjne). Następnie zrobił klase GameVob która dziedziczy po GameObject która miała by dodatkowe pole z teksturą.

Następnie klasa
Player dziedziczy po GameVob który dziedziczy po GameObject
MouseManager dziedziczy tylko po GameObject

Fajniejszym rozwiązaniem było by użycie interfejsów i stworzenie interfejsu GameObject zamiast klasy ;)

 

Gdy pisałem swoją gierkę uzywałem tego kursy troche temu to juz było ale myśle ze i tak warto ;)

http://www.centrumxp.pl/dotNet/116,kategoria,Kurs-C-cz-II.aspx

Pierwszej części nie proponuje bo raczej byś się wynudził ale jeśli chcesz możesz spróbować poczytać obie ;)
komentarz 4 października 2017 przez Kodeman Gaduła (4,480 p.)
Faktycznie, Twój pomysł jest lepszy, sprawdzę jak używać interfejsów, dziękuję również za link.

Jeśli można spytać jeszcze na koniec: Jakbyś rozwiązał problem z klasą camera? Mam w GameState jej publiczny statyczny obiekt, bo klasa MouseManager też potrzebuje tego obiektu. (Wielokrotnie w różnych postaciach się na ten problem natykam)

Czy właściwie użyłem public static, czy jest jakiś inny sposób, gdyż jakoś nie widzę przekazywania argumentów przez funkcję, bo zaraz się zrobi takich 1000. (I co znaczy Vob w GameVob? :p)

Napisz jeśli można w odpowiedzi, to będę mógł dać Ci najlepszą odpowiedź :)

1 odpowiedź

+1 głos
odpowiedź 4 października 2017 przez rafal.budzis Szeryf (85,260 p.)
wybrane 5 października 2017 przez Kodeman
 
Najlepsza
GameVob wymyśliłem wzorując się na klasach gry Gothic. Kiedyś zajmowałem się modyfikowaniem tej gry.

Vob to - Visual Object. Obiekt w świecie który ma graficzną prezentacje.

jest jeszcze Mob który dziedziczy po Vob. Mob raczej już wiesz co to jest ;)

Co do staticów tez nigdy nie znalazłem idealnego rozwiązania problemów z nimi. Gry są na tyle specyficzne ze czesto potrzeba obiektów widocznych w wielu miejscach. Mam kilka pomysłów ale nigdy ich nie implementowałem w grach wiec nie wiem na ile się sprawdzą

1. singleton - jest to klasa z jedną funcją statyczną która zwraca jej instancje. Poczytasz na necie pełno jest przykładów

2. zrobić więcej funkcji update w jednej klasie. Rozdzielać wszystko na mniejsze funkcje do których będzie przekazywany jeden konkretny parametr.

3. Tworzyć klasy statyczne które mają wszystkie pola i funkcje jako statyczne. Taką klase np napisałem kiedyś do przechowywania tekstur uprzedzam ze było to prawie 5 lat temu

https://pastebin.com/Jpz9vhUH

Podobne pytania

+1 głos
0 odpowiedzi 252 wizyt
pytanie zadane 24 grudnia 2016 w C# przez Graatz Obywatel (1,480 p.)
0 głosów
2 odpowiedzi 887 wizyt
pytanie zadane 3 kwietnia 2019 w C# przez takiczloviek Nowicjusz (120 p.)
0 głosów
1 odpowiedź 360 wizyt
pytanie zadane 22 grudnia 2018 w C# przez noname3 Obywatel (1,180 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...