Witajcie
Próbuje sobie stworzyć grę i mam problem jak rozplanować kod - mianowicie ten cały kram na warstwy, wątki etc.
Co chce uzyskać - chciałbym uzyskać taką aplikację że mimo wykonywania operacji w tle ona się nie zawiesza.
Mam zatem kilka pytań:
Czym jest warstwa aplikacji - czy to jakaś wydzielona część np zbiór klas ?
Jakie aplikacja (tutaj gra) powinna posiadać warstwy (z całą pewnością GUI oraz jakąś logikę)
Czym jest logika aplikacji - za co odpwiada tak właściwie
Jak sensownie zaplanować kod- tak by wątki wykonywały swoje zadania nie przeszkadzając sobie oraz nie czekając na siebie?
Jak zaplanować komunikację między warstwami ?
Czym jest silnik gry (i czy zwykłe aplikację też mają silnik :) ) - czy to gotowe do użycia klasy, funkcję, moduły np DatabaseConnector, gotowe kontrolki GUI etc. ?
Wielowątkowość aplikacji - anty sposoby które stosowałem
Pierwszy sposób - były 3 wątki:
- główny - miał w sobie pętlę główną i reagował na zdarzenia np
if(*****) PreviewWorldMapCamera->changeLevelOfZoom(event.mouseWheel.delta,*MainWindow);
- rysujący - wołał metodę draw() ; jakiegoś obiektu
- aktualizujący -wołał na elementach metodę update();
Sterowałem tymi wątkami z wątku głównego ustawiając właściwe zmienne na np DExit lub UExit o_o
Drugi sposób to było że wszystko robię w głównym wątku a jak mam zadanie dodatkowe np odliczanie czasu to tworzyłem do tego nowy wątek
A komunikacje prowadziłem za pomocą klasy SignalManager i te sygnały były obsługiwane wewnątrz wątku głównego
W pierwszym sposobie to concurrent computing był o kant rozbić bo gdy wątek rysował to watek aktualizujący czekał aż skończy by np nie zmienić pozycji obiektu na ekranie podczas rysowania i na odwrót.
W drugi sposób też mnie nie zadowala - w przypadku gdy wykonuje trudne obliczenia cała aplikacja zawiesza się i nie reaguje.
Podsumowując
Na ile wątków podzielić aplikacje i jakie dawać im zadania ?
Na jakie warstwy najlepiej podzielić program, jaka jest funkcjonalność każdej warstwy i ile ich powinno być?
Jak należy zaimplementować komunikację między warstwami?