Autor Wątek: Silnik 2d  (Przeczytany 11560 razy)

Offline Charibo

  • Redaktor

# Wrzesień 03, 2009, 18:46:42
// Edit: w 6 miechów masz poznać C++ (dobrze), poznać StdC++Lib :P (stopień podstawowy), nauczyć się api graf. a przy tym mieć jakiś kontakt ze światem zewnętrznym?
Dlaczego uważasz, że autor chciałby pisać grę 2D w tak niewygodnym, wolnym w programowaniu i topornym języku? :)

Poza tym raczej zakończyłbym offtop ze strony wine na temat nicka Jokera. Ludzie, są lepsze sposoby nabijania postów, jak już musicie. ;)

Offline Mr. Spam

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

Offline arturooo3

  • Użytkownik

# Wrzesień 18, 2009, 23:30:17
// Edit: w 6 miechów masz poznać C++ (dobrze), poznać StdC++Lib :P (stopień podstawowy), nauczyć się api graf. a przy tym mieć jakiś kontakt ze światem zewnętrznym?
Dlaczego uważasz, że autor chciałby pisać grę 2D w tak niewygodnym, wolnym w programowaniu i topornym języku? :)

Nie rozumiem dlaczego C++ nazywasz niewygodnym i topornym językiem  ;D
Zacznijmy od topornym ponieważ jest to zwrot bez sensu więc można go na start wyeliminować.
Programuję od około 8/9 lat, zetknąłem się z różnymi językami ( Visual Basic, Pascal, różne skryptowe i inne oparte na strukturze c++ ), teraz poznaję dogłębnie C++ i muszę stwierdzić, że jest to język, który poza dawaniem możliwości jest wygodny, przyjemny a na dodatek warto od niego zacząć, bo początek itak jest prosty ( chyba, że chcesz się kłócić o to ile zajmie Ci w innym linijek.. ) a dzięki temu od razu zyskasz możliwości a nie zbędną wiedzę ( np. Pascal ).
« Ostatnia zmiana: Wrzesień 19, 2009, 12:11:55 wysłana przez Charibo »

Offline RedHot

  • Użytkownik

# Wrzesień 19, 2009, 02:43:16
Charibo zapewne żartował.

Offline Charibo

  • Redaktor

# Wrzesień 19, 2009, 12:38:13
Oczywiście, że nie żartowałem. C++ jest czasem niezbędny, jeśli chodzi o wydajność, ale jeśli chodzi o wygodę programowania - jest lata świetlne w tyle za nowoczesnymi rozwiązaniami (dajmy, .NET czy Java). Ot, po kolei:
- Ręczne zarządzanie pamięcią. Przydaje się, jeśli zależy nam na każdym kilobajcie i na każdym cyklu, w duzych tytułach, które faktycznie używają sprzętu do granic. I własciwie tylko tam, a taki system trzeba napisać i utrzymywać. Albo mamy memleaki.
- Brak GC - w zasadzie wynika z poprzedniego.
- Podział na nagłówki i pliki cpp, wraz ze wszystkimi konsekwencjami (utrudniony design, zależności cykliczne, problemy z samym pojęciem "jednostka kompilacji"...)
- Brak czegoś, co można nazwać "dobrą biblioteką standardową".
- Brak IDE z designerem okienek - dobra, jest MFC, ale MFC nie zachwyca.
- Brak delegatów wbudowanych w język.
- Masa "ciemnych zaułków" - UB, nieścisłości w standardzie, różnice między kompilatorami...

Podsumowując IMO jest tak, że C++ jest potrzebny i nie zginie - bo pozwala na lowlevel optymalizacje, na wyciąganie maksa ze sprzętu. Ale główną wadą jest to, że wielu ułatwień nie ma out of the box. A to znaczy, że trzeba napisać je samemu. A to, idąc dalej, oznacza, że trzeba na to stracić czas. A czas jest najcenniejszy dla programisty, bo można spożytkować go na przykład na pisanie gameplayu, niż własnego zarządzania pamięcią (olewając 3%-owy spadek wydajności GC). :)

Offline arturooo3

  • Użytkownik

# Wrzesień 19, 2009, 16:52:19
Różnice między kompilatorami nie są ogromne, poza tym zazwyczaj przyzwyczajasz się do jednego.
Ciemne zaułki to tylko dodatki :p
MFC może nie jest genialne, ale MFC to nie wszystko. Masz wieloplatformowe Qt, masz nowoczesne wxWidgets.
Oddzielne nagłówki i pliki cpp to może być zaleta, gdy dobrze się to wykorzysta.
Ręczne zarządzanie pamięcią to też zaleta.

Narzekasz, na brak dobrej standardowej, a do c++ są setki dobrych bibliotek i miliony linijek kodu, napisanych przez ludzi z całego świata dla ułatwienia pracy.
Ponadto przez to, że język jest najpopularniejszy szybko się rozwija.

Offline Dab

  • Redaktor
    • blog

# Wrzesień 19, 2009, 17:54:36
Ponadto przez to, że język jest najpopularniejszy szybko się rozwija.
WTF? C++ się szybko rozwija?

wine

  • Gość
# Wrzesień 19, 2009, 17:59:42
Ponadto przez to, że język jest najpopularniejszy szybko się rozwija.
WTF? C++ się szybko rozwija?
Moim zdaniem arturooo3 chodziło o to że się więcej softu dla koderów pisze...

Offline arturooo3

  • Użytkownik

# Wrzesień 19, 2009, 19:13:45
Nagłówki, dllki, silniki.. Nie tylko rozwój "z góry" mam na myśli.
Także rozwój koderów ;)

wine

  • Gość
# Wrzesień 19, 2009, 19:14:59
Także rozwój koderów ;)
WTF? A co można w koderach rozwijać?

Offline Charibo

  • Redaktor

# Wrzesień 19, 2009, 19:24:23
Oddzielne nagłówki i pliki cpp to może być zaleta, gdy dobrze się to wykorzysta.
Podaj trzy zalety. :)
Ręczne zarządzanie pamięcią to też zaleta.
Jasne, czasem tak. Ale zazwyczaj wielka wada. Powiedz mi, ile projektów gier indie, robionych przez jednego, dwóch programistów może potrzebować takiej armaty na komara? :)
Narzekasz, na brak dobrej standardowej, a do c++ są setki dobrych bibliotek
To prawda. Ale każda nowa biblioteka wymaga nauki - strata czasu.
Ponadto przez to, że język jest najpopularniejszy szybko się rozwija.
No to ciekawe dlaczego C++0x jest na najlepszej drodze do bycia C++1x ;)
Nagłówki, dllki, silniki.. Nie tylko rozwój "z góry" mam na myśli.
Ile ostatnio powstało nowych silników? Przeznaczonych dla kogoś takiego jak ja, twórcy, który ma mało czasu i mało pieniędzy? :)

Offline arturooo3

  • Użytkownik

# Wrzesień 19, 2009, 19:47:44
Także rozwój koderów ;)
WTF? A co można w koderach rozwijać?
Rozwój c++ przez koderów :P

Cytuj
Podaj trzy zalety. Smiley
1. Klasa jest przejrzysta, bo długie funkcje masz w pliku .cpp
2. ... przez co koderzy łatwiej mogą dostrzec składniki
3. Jest jakiś porządek (jeżeli programista go dochowa...) - cpp zawiera funkcje, kod, natomiast headery zawierają inkludowane biblioteki, definicje, klasy ( w tej postaci "krótkiej" jak pisałem wcześniej ).

Cytuj
Jasne, czasem tak. Ale zazwyczaj wielka wada. Powiedz mi, ile projektów gier indie, robionych przez jednego, dwóch programistów może potrzebować takiej armaty na komara? Smiley
Czyż programista zaczynając od małej gry nie kończy często w dużej firmie tworzącej gry? Pasja, to pasja.

Cytuj
To prawda. Ale każda nowa biblioteka wymaga nauki - strata czasu.
Czas najważniejszy dla programisty, ale nauka jeszcze ważniejsza. Idąc dalej Twoją filozofią dojdziemy do punktu, gdy zostaniemy jedynie projektantem gry, bo pisanie to strata czasu - komputer sam powinien wszystko zrobić. Poza tym.. prosta biblioteka napisana przez sprytnego programistę to nauka max. na dzień.

Cytuj
No to ciekawe dlaczego C++0x jest na najlepszej drodze do bycia C++1x
A czy dopracowanie to coś złego?
Poza tym mam na myśli także rozwój C++ przez programistów.

Cytuj
Ile ostatnio powstało nowych silników? Przeznaczonych dla kogoś takiego jak ja, twórcy, który ma mało czasu i mało pieniędzy?
Silników powstaje dużo, bo jak ktoś pisał dużo programistów gier jednak zaczyna się bawić nie w gry, a silniki. Dla mnie jednak ważniejszy jest rozwój już istniejących, bo co nam po ilości miast jakości Drogi Charibo?
Mało czasu to największy problem. I'm sorry..   8)

Offline ShadowDancer

  • Redaktor

# Wrzesień 19, 2009, 19:52:50
Skoro masz mało czasu, to jak chcesz być programistą? :D

Offline arturooo3

  • Użytkownik

# Wrzesień 19, 2009, 20:08:29
Charibo jesteś skazany na niebycie programistą :P

Ale kończąc offtop.
fallconn myślałeś nad jakimś gotowym silnikiem?
2d także posiada ich wiele.
Znam całkiem fajny - HGE.
http://hge.relishgames.com
Jest dostępny z kodem źródłowym - jeżeli zdecydujesz się na C++, polecam przyjrzeć się gdy już podszkolisz język :)
Wtedy zrozumiesz jak powinien takowy wyglądać ;)

Offline Liosan

  • Redaktor

# Wrzesień 19, 2009, 20:14:05
Jeszcze co do plików nagłówkowych:

Cytuj
Podaj trzy zalety. Smiley
1. Klasa jest przejrzysta, bo długie funkcje masz w pliku .cpp
2. ... przez co koderzy łatwiej mogą dostrzec składniki
3. Jest jakiś porządek (jeżeli programista go dochowa...) - cpp zawiera funkcje, kod, natomiast headery zawierają inkludowane biblioteki, definicje, klasy ( w tej postaci "krótkiej" jak pisałem wcześniej ).
To jest jedna zaleta - mniej czytania na raz przy przeglądaniu klasy. W językach z prostszą składnią taką funkcjonalność zapewnia IDE :)

Liosan

Offline Kos

  • Użytkownik
    • kos.gd

# Wrzesień 19, 2009, 20:15:02
1. Klasa jest przejrzysta, bo długie funkcje masz w pliku .cpp
2. ... przez co koderzy łatwiej mogą dostrzec składniki
3. Jest jakiś porządek (jeżeli programista go dochowa...) - cpp zawiera funkcje, kod, natomiast headery zawierają inkludowane biblioteki, definicje, klasy ( w tej postaci "krótkiej" jak pisałem wcześniej ).

Daj spokój, podział .h/.cpp to mój ulubiony grzech C++ :P Mam wrażenie, że wymieniłeś tu jedną zaletę trzykrotnie (że klasa jest przejrzysta, że jest w niej porządek i koderzy się z tego cieszą :P).
Może 20 lat temu byłaby to faktycznie zaleta, ale teraz każdy szanujący się edytor potrafi zwijać kod lub wyświetlić outline klasy z możliwością szybkiego skoku do dowolnego elementu.

Nie zmienia to faktu, że podział .h/.cpp to okrutny workaround wokół faktu, że C++ nie ma pojęcia modułu. Parę konsekwencje:
- Duplikacja kodu pomiędzy .h/.cpp, trzeba pisać to samo w 2 miejscach. IDE to w pewnym stopniu rekompensuje, ale i tak jest to irytujące.
- Wspomniany przez Ciebie podział logiczny, mimo że w miarę słuszny w idei, i tak bierze w łeb gdy musisz wrzucać kod do nagłówków z powodu ograniczeń kompilatora (szablony, funkcje inline).
- Kompilacja jest długa i nudna, bo kompilator zwykle kompiluje jeden nagłówek kilkukrotnie (konsekwencja kompilacji każdego .cpp osobno). Zmusza to programistów do przerabiania kodu, by móc przerzucić jak najwięcej #include z .h do .cpp, lub korzystania z średnio wygodnych półśrodków typu PCH.