Autor Wątek: Gra akcji 2d - problemy techniczne  (Przeczytany 5356 razy)

Offline AvShad

  • Użytkownik

# Styczeń 09, 2014, 23:52:51
Witam drogich forumowiczów mam pewien problem gdyż po pisaniu wielu amatorskich gier 2d postanowiłem napisać coś większego i w końcu skończyć jakąś grę. Postanowiłem zrobić grę akcji 2d. Wykorzystałem 2 najbardziej przeze mnie znane biblioteki(SFML I BOX2D) i zacząłem pisać. Napisałem pierwszy prototyp z fizyką i postanowiłem napisać kod od nowa dodają elementy i poprawiając błędy. Moim problemem stała się mapa. Czy robić ją kafelkowo czy w inny sposób? O technice kafelkowej dowiedziałem się wczoraj i dzisiaj sobie szybko śmignąłem edytor mapy z 3 kafelkami(jeszcze bez zapisu ale to jak na razie było tylko na próbę) i w mojej głowie pojawiły się pewne wątpliwości techniczne związane z taką mapą. Na plus na pewno idzie prostota tworzenia/odczytywania i zapisywania takiej mapy ale jak sprawa ma się z wykorzystaniem Box 2d? Skoro z 3 spritów tworze całą scenę wyświetlając je w pętli i zmieniając tylko ich położenie to jak będzie działała fizyka z Box 2d? Poza tym w jaki sposób zrobić obsługę zdarzeń? Implementować ją już przy tworzeniu mapy czy ręcznie w kodzie dodawać eventy,questy itp w zależności od tego jaka mapa jest aktualnie wczytana? A z tym boxem to myślałem żeby mape tworzyć normalnie kafelkowo i tam gdzie dałem jakieś platformy po których ma gracz skakać dorobić po prostu w tym samym miejscu fizyczny odpowiednik tej platformy złożonej np z 4 kafelków i tworzyć jeden obiekt fizyczny. A druga opcja jest taka że pisze w programie "dekoder" który nie tylko rozszyfrowuje gdzie ma się znajdować jaki obiekt ale od razu tworzy tam obiekt fizyczny o odpowiednich właściwościach taki kod byłby najkrótszy, najbardziej czytelny i według mnie najbardziej wykorzystywałby on możliwości mapy kafelkowej bo poziom stworzony w edytorze nie byłby tylko grafiką ale od razu po załadowaniu do gry tworzone by były obiekty fizyczne... problemem jest optymalizacja coś takiego pochłaniałoby sporo zasobów i tworzenie obiektów na bieżąco  podczas gry mogłoby powodować ściny, a ładowanie wszystkiego do ramu spowoduje znaczne zwiększenie jego zużycia... Nie wiem co mam zrobić może są jakieś inne sposoby? A co do eventów to też nie wiem czy tworzyć odpowiednie kafelki które się będą na siebie nakładały tyle że jedna będzie przeźroczysta i zależnie od swojego id będzie miała inne przeznaczenie np odpalała animacje czy respawnowała  przeciwnika... nie mam pojęcia jak dobrze wykorzystać możliwości tej mapy kafelkowej. Poprzednio po prostu tworzyłem sprita ustawiałem go w odpowiednim miejscu a potem tworzyłem obiekt fizyczny w tym samym wadą tego była zasobożerność pod względem ilości spritów i ustawianie wszystkiego metodą prób i błędów na płaszczyznach x i y... Widzę ogromny potencjał w kafelka przy tworzeniu gry 2D RPG ale do gry akcji widzianej z boku (ala mario tyle że z lepszą grafiką :D ) to mam pewne wątpliwości jednocześnie nie wiedząc co innego mógłbym zastosować... pomożecie?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xirdus

  • Moderator

  • +1
# Styczeń 10, 2014, 00:27:06
Wait - chcesz skończyć z amatorszczyzną i zrobić porządną grę, ale o tilemapach dowiedziałeś się wczoraj!?

W każdym razie - zrób tak, że każdy kafelek "blokujący" jest jednym ciałem w Box2D. Jak będzie ciąć to wtedy się martw.

A całą resztą problemów zajmij się dopiero wtedy, kiedy się pojawią - gdy już będziesz miał ludzika skaczącego po platformach z wczytanej mapy.

Offline P@tyS

  • Użytkownik
    • Patys coding

# Styczeń 10, 2014, 08:57:19
Możesz wykorzystać Tiled: http://www.mapeditor.org/ i w nim zrobić mapę kafelkową(Tile Layer) i kolizje (Object Layer), gdzie rysujesz figury w miejscach gdzie jest kolizja, a potem tym możesz wczytać do programu tym: https://github.com/bjorn/tiled/wiki/TMX-Map-Format

Offline jelcynek

  • Użytkownik

  • +4
# Styczeń 10, 2014, 08:59:13
Protip: używaj entera. Czytanie tego to był horror.

Offline AvShad

  • Użytkownik

# Styczeń 10, 2014, 11:50:08
Ok dzięki za szybką odpowiedź. Następnym razem użyje entera. Myślę nad optymalizacją teraz żeby wszystko było zaplanowane skoro chcę tę grę skończyć, a co do tego że dowiedziałem się przedwczoraj o mapach kafelkowych to tak jakoś wyszło już nadrobiłem zaległości. Dobra spróbuje zrobić to tak jak mówicie ustawie w kodzie że np jeżeli id bloku to 1 a to jest np jakaś platforma to od razu tworzy boxa wielkości tej kafelki i zobaczę jak to wszystko będzie działać. Wiem że to nie ten dział ale po co zakładać milion tematów... znacie jakiegoś taniego grafika 2d/3d?

Offline Estivo

  • Użytkownik
    • Blog

# Styczeń 10, 2014, 16:14:52
Jeżeli to ma być akcja, to postać nie może się ruszać po gridzie.

Offline Nsuidara

  • Użytkownik
    • Site

# Styczeń 10, 2014, 17:42:35
Zasadniczo mam jedno bądź kilka pytań ...

Ile już zrealizowałeś gierek ?
Jakie przeprowadziłeś testy, aby myśleć o optymalizacji ?

Zasadniczo "Optymalizacji" nie zawsze idzie z "Czytelnością Kodu" w łeb łeb... najpierw zrealizuj jakieś kilka gierek prostych itp... a samo wszystko z czasem przyjdzie, jak ja spoglądam na kod mój lat 6 wstecz... to mnie te kody  przerażają :D

Nie wiem jaką grę byś musiał zrobić 2D aby było kiepsko z optymalizacją ... to wręcz naprawdę raczej to nie była by gra 2D albo naprawdę na niższym poziomie niż wymagana jest wiedza robienia gier ... :P
« Ostatnia zmiana: Styczeń 10, 2014, 17:44:18 wysłana przez Nsuidara »

Offline AvShad

  • Użytkownik

# Styczeń 11, 2014, 15:09:59
Gra piszę w c++ aby odpalić ją na pentium 2 ewentualnie 3 i 128 mb ramu dlatego oszczędzam.

//edit Napisałem nie skończyłem żadnej gry a pisałem wcześnie w samym sfml około 13 mniej lub bardzie zaawansowanych z obsługą sieci i serwera np w rpg itp ale zawsze przerywałem prace i dlatego mam spore braki...  Wiem że to pytanie killer i usłyszę masę hejtu że idz się uczyć ale jak w SFML najefektywniej zrobić pasek GUI typu hp itd? Wydaje mi się że po prostu umieścić w odpowiednim miejscu sprita i go przemieszczać razem z Viewem, ale pewności nie mam bo brakuje mi doświadczenia... 12 nieskończonych gier to jest nic dlatego zadaje pytanie, a co do czytelności kodu to kod piszę czytelnie i od razu go optymalizuje to chyba dobre podejście? Chyba że lepiej napisać 20000 linijek kodu a potem się okazuje że gra ma 4 fps na starszym sprzęcie i trzeba szukać co jest aż tak zasobożerne...
« Ostatnia zmiana: Styczeń 11, 2014, 15:17:27 wysłana przez AvShad »

Offline Estivo

  • Użytkownik
    • Blog

# Styczeń 11, 2014, 15:43:22
zrobic dodatkowy view. Na default view rysujesz gui, a na tym drugim rysujesz np. mape. sam pasek to zrobic wystarczy 2 rectange shape.

Offline Rokuzo

  • Użytkownik
    • Masz na sprzedaż klucze do cs go?

  • +1
# Styczeń 11, 2014, 16:46:47
Proszę Cię. C++, ładowanie zasobów na początku działania gry, a nie w pętli renderującej grę, jakiś culling i nie ma bata by gra nie działała na starszym sprzęcie zwłaszcza, że jest w 2D.

Zapomnij na razie o "optymalizacji" i rób gry.

Zresztą na dzień dzisiejszy procesory Pentium 2 i 3 (zresztą 4 też) to dla graczy antyki, które najwyżej mogliby oglądać w muzeum. 128MB RAM???!!! Mamy 2014 rok... Grand Theft Auto III (2001 rok) minimalne wymagania RAMu - 64MB. A stopniowe składanie kompa to nie jest duży wydatek.
« Ostatnia zmiana: Styczeń 11, 2014, 16:52:18 wysłana przez Rokuzo »

Offline AvShad

  • Użytkownik

# Styczeń 13, 2014, 11:50:51
I właśnie przez takie podejście mamy dzisiaj aplikacje które zżerają po 4gb ale nikomu to nie robi bo można wydać kase i złożyć lepszy sprzęt... Przykładem jest minecraft który powinien być błahostką dla karty graficznej i procesora a potrafi się ciąć na wielordzeniowych kombajnach.

Offline Joker

  • Użytkownik

  • +1
# Styczeń 13, 2014, 12:06:15
Minecraft to może nie król optymalizacji ale na athlonie 5200+ i gf9400gt i win7 z 2gb ram nie miałem żadnych z nim problemów. Więc o co chodzi ?, jak chcesz zrobić grę która odpali się na " wszystkim " to kup laptopa z intelem atomem i na jego karcie zintegrowanej testuj. Jak tam ruszy to ruszy na każdym Pc.

Offline AvShad

  • Użytkownik

  • +1
# Styczeń 13, 2014, 14:29:15
;p ja programuje obecnie na atomie n2600 :D

Offline Nsuidara

  • Użytkownik
    • Site

# Styczeń 23, 2014, 17:05:20
Zasadniczo, tu nie chodzi o podejście... (ja osobiście staram się podchodzić do problemu jak najbardziej optymalnie - ze względu na prostotę = kodu)
Zasadniczo optymizacja to jakieś algorytmy które podnoszą wydajność..