Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - hashedone

Strony: [1] 2 3 4 5 ... 47
1
Szkółka / Odp: Czy uczyć się programowania w języku Lua?
« dnia: Wrzesień 11, 2017, 11:23:14 »
To nie jest żaden usecase. Każdy rozsądny silnik umie to rozsądnie wyrenderować. Powiedziałbym nawet, że to antyprzykład - używając gotowego silnika masz za darmo sensowny performance, robiąc to samemu "bo zrobię wydajniej", "będę mógł optymalizować" męczysz się dniami żeby samemu zaimplementować octree a na końcu się okazuje, że i tak jesteś mniej wydajny od Unity bo twoje struktury nie przewidziały czegoś. Tak więc kolejne lata optymalizujesz wyświetlanie cuba z teksturą, a Twój kolega w tym czasie już piszę trzecia grę, bazując na bogatym doświadczeniu z dwóch poprzednich.

2
Szkółka / Odp: Czy uczyć się programowania w języku Lua?
« dnia: Wrzesień 08, 2017, 12:25:58 »
Mam nadzieję, że nie jestem ostatnim (a zarazem całkiem młodym) wyznawcą tej ścieżki.
Pewnie nie ostatnim, wynajdowanie koła na nowo jest typową filozofią młodych programistów, doświadczenie skutecznie z tego leczy.

Cytuj
Szczególnie wtedy, gdy nie możesz nawet przetestować prototypu, bo chodzi w jednej klatce na sekundę i mimo wszystko potrzeba optymalizacji.
To jest usecase czy gdybanie?

Prawdziwi programiści wiedzą, że albo pisze się silniki, albo gry ;)

3
Projekty zaawansowane / Odp: [Android] WarSpace
« dnia: Wrzesień 21, 2016, 12:17:53 »
Z ciekawości - masz prawa do tych assetów? Nie było by uczciwie napisać że to port War blade na Androida? Mnie to jakoś bardzo nie przeszkadza,  ale jeśli używasz assetów bezpośrednio wyjetych z innej gryi to takiej która osiągnęła spory sukces i nie była nigdy wydana na żadnej otwartej licencji, warto mieć na to podkładkę.  Tym bardziej,  jeśli te grę wydajesz.

4
C++ / Odp: Typ wyniku działania (szablony)
« dnia: Wrzesień 09, 2016, 22:02:29 »
Rozwiązanie kapustmana zadziała tylko dla typów które dają się zainicjalizować zerem (dla tego co w przykładzie akurat się sprawdzi), natomiast bardziej generycznie:
typename std::result_of<decltype([](auto a, auto b) { return a + b; })(T1, T2)>::typeMożna owrapować na przykład tak:
template <typename T1, T2> using sum_type =
typename std::result_of<decltype([](auto a, auto b) { return a + b; })(T1, T2)>::type;
Nie kompilowałem, więc ewentualne literówki trzeba poprawić.

5
- grafika który zajmuje się obecnie projektowaniem i tworzeniem grafik do wszelakich aplikacji, na koncie ma już chyba ze 300 aplikacji jak nie lepiej.
I bez portfolio które można podlinkować? Coś jest nie tak z tym grafikiem, albo ktoś tu kręci.

6
C++ / Odp: Przekazywanie zmiennej globalnej do funkcji
« dnia: Sierpień 12, 2016, 21:46:21 »
@koirat - liczenie różnicy czasu przez sumowanie delt jest zawsze złym rozwiązaniem - jeśli potrzebujemy takiej funkcjonalności to wtedy faktycznie może mieć sens przekazywania dodatkowo aktualnego czasu, ale być może lepiej po prostu pracować na fixed step loop. Natomiast nie wiem po co ktoś miałby przekazywać poprzedni czas.

@ Reg - udostępnianie ich jako zmienne globalnie NIE jest ok właśnie z powodu, jaki podałeś - w szczególności "a w moim programie nie zawsze jest poprawna". I innych powodów opisanych w artykule podlinkowanym przez Xiona. Na tych problemach ze zmiennymi globalnymi przejedzie się prędzej czy później każdy.

7
C++ / Odp: Przekazywanie zmiennej globalnej do funkcji
« dnia: Sierpień 11, 2016, 19:02:37 »
Ogólnie post Xiona zamyka temat zmiennych globalnych. Jeśli ktoś po nim dalej uważa, że mogą mieć zastosowanie tu, bądź gdziekolwiek, niech używa ich dalej i jak trafi mu się któryś z problemów tam opisanych, niech przestanie ich używać zamiast szukać obejść na problemy które sam produkuje.

Jest ewentualnie kwestia zamykania takich danych w klasie w której jest wykorzystywana - prawie zawsze jest to złe, bo prawie zawsze ta zmienna jest wyliczana dla danego momentu w jednym miejscu, w danym momencie czasu i dalej na jej podstawie przeliczany jest faktyczny stan aplikacji (tu: gry). Nie jest to natomiast część trwałego stanu obiektu - dt jest poprawny tylko dla danego kwantu czasu (co w przypadku architektury oprogramowania prawie zawsze odpowiada konkretnemu stanowi stosu od danego miejsca w dół). Jeśli natomiast z jakiegoś powodu potrzebne jest więcej niż jedna zmienna przekazywana równolegle z jakimiś innymi zmiennymi, można je jak najbardziej zawrzeć w jakieś innej strukturze, która jest przekazywana jako całość. I tak, ja wiem, że w C++ klasy i struktury to językowo to samo, jednak kluczowe jest tu to, że nie jest to ta sama klasa, w której te dane są wykorzystywane. Pomijam fakt, że nie spotkałem się z sytuacją, kiedy aktualny czas, poprzedni czas, czy jakiekolwiek dodatkowe czasy reprezentowane u Ciebie przez g_Time1 i g_Time2 były by potrzebne wszędzie tam gdzie się korzysta z delty czasu - prawie zawsze, używa się  tych danych tylko w jednym miejscu do wyliczenia delty, a dalej operuje właśnie na delcie.

Zaznaczam, że wszędzie, gdzie napisałem "prawie zawsze", świerzbiło mnie, żeby napisać "zawsze", bo nie potrafię wyobrazić sobie sensownej sytuacji, kiedy zachodziła by inna sytuacja, jakkolwiek dopuszczam taką możliwość - jeśli bym jednak na taką sytuację trafił, co najmniej kilkakrotnie zastanowiłbym się, czy nie mam gdzieś  błędu w logice/architekturze aplikacji.

8
C++ / Odp: Przekazywanie zmiennej globalnej do funkcji
« dnia: Sierpień 08, 2016, 22:07:30 »
Wydłużasz sobie tylko wywołanie funkcji c(:
Znaczy że trzeba napisać więcej literek, czy że przeraża Cię dodatkowy "push" (a tak na prawdę nie "push" tylko "mov")? Zapewniam Cię że ilość argumentów do przekazania (przynajmniej typu tak prostego jak int - inaczej może być, jeśli konstruktor kopiujący jest nietrywialny, lub ilość enkapsulowanych danych jest bardzo duża) nie ma żadnego (a już na pewno zauważalnego) wpływu na wydajność wykonania. W szczególności w tak prostym przypadku argument prawie na pewno i tak zostanie przekazany przez rejestr, a kompilator zadba, żeby bezpośrednio w wyniku poprzednich obliczeń tam się ten argument znalazł.

W tym przypadku stanowczo najlepszym rozwiązaniem jest przekazanie delty w formie argumentu i zupełnie zrezygnowanie ze zmiennych globalnych. Dodanie klasy może mieć sens, jeśli potrzeba abstrakcji która ma stan i operacje które trzeba na nim wykonać (w szczególności: delta czasu nie jest stanem i nie ma specjalnie sensu trzymanie jej jako członka klasy). I jasne - w tak prostym przypadku to to kwestie "religijne", natomiast jak tylko zacznie się trochę więcej w Twoim kodzie dziać, zaczniesz mieć problemy z jego utrzymaniem, bo API będzie miało niejasne zależności.

9
Projekty rozpoczęte / Odp: SFML_Buldier
« dnia: Lipiec 19, 2016, 09:09:45 »
Ad. 2 - Do formatowania zera wiodącego w C++ nie używaj printf (zaszłość z C), tylko std::cin i manipulatorów std::ios::width + std::ios::fill:
std::cout  << std::ios::width(2) << std::ios::fill('0') << var << '\n';

10
Szkółka / Odp: Tekstura jak śnieżący ekran
« dnia: Lipiec 16, 2016, 19:50:26 »
Nie znam GLSL. Nie ma coś pod c++ i Opengl?
GLSL jest częścią OpenGL i jeśli coś jest z użyciem GLSL to jest to właśnie pod OGL. Nie da się dzisiaj programować w (w miarę nowoczesnym) OpenGLu bez korzystania z GLSL. I przez "w miarę nowoczesny" nie mam na myśli nowinek technologicznych z ostatnich pięciu lat - OGL 3.0 (gdzie już fixed pipeline było przestarzałe) to technologia z 2008 roku - a już dużo wcześniej preferowało się shadery nad FP. OpenGL bez shaderów to technologia sprzed ponad dekady i jej nauka nie ma żadnego sensu.

11
Zbinduj wszystkie tekstury do jednej dużej tablicy tekstur, a później wykorzystuj tylko te, których potrzebujesz.

12
Design / Odp: Pomysł: Questy komponowane przez graczy
« dnia: Kwiecień 20, 2016, 11:30:26 »
Content i tak musisz stworzyć. Choćby jako możliwości tego co może się stać. Każdą z tych możliwości trzeba nazwać. Możliwością jest na przykład "śmierć", "utrata biznesu", "złamanie nogi" (tylko z Twojego poprzedniego posta). Do tego musisz oprogramować pary [przyczyna -> skutek], bo o ile dla Ciebie może być oczywiste że [złamana noga -> nie można prowadzić biznesu], o tyle rzecz jest bardziej skomplikowana (bo jeszcze może zatrudnić zastępce, bo może stać go na dobrego chirurga który mu usztywni dobrze nogę) - to wszystko też jest contentem. Do tego najpewniej wagi dla tych czynników dla NPCów chciałbyś generować losowo (żeby było nieprzewidywalnie) - ok, ale musisz oprogramować jakieś ograniczenia, na przykład "moja śmierć" zawsze powinna być raczej bardzo w stronę "nie chce" - chyba że NPC ma problemy z depresją, za to "śmierć X" jest zależna od relacji między NPCami (pamiętaj, że jeśli NPC Y chce "śmierć X" na 90% i jednocześnie "wzbogacenie się X" na 70% to jest to bardzo dziwne - ale jeśli na przykład X ma coś na sumieniu, a wzbogacenie się przyciągnie uwagę straży, to nawet możliwe). Tobie się wydaje, ze to rozwiązanie minimalizuje content, ja Ci mówię, że wymaga dużo, dużo więcej contentu niż tradycyjne podejście.

13
Sieć i multiplayer / Odp: Gra 2d, udp czy tcp?
« dnia: Kwiecień 15, 2016, 15:44:45 »
** Powiecie, że UDP jest bezpołączeniowe, tak samo jak IP - ok, ale zarówno dla TCP/IP jak i UDP/IP router trzyma tabelę "aktywnych połączeń" - widząc, że host z wewnątrz sieci wysłał pakiet z danego adresu wewnątrzsieciowego i portu źródłowego na dany adres i port docelowy (od strony WAN), zapisze tę krotkę 4 wartości w tabeli w RAM.
Jak przyjdzie jakiś pakiet z zewnątrz (z WAN), to NAT sprawdza w tabeli "aktywnych połączeń", czy któryś host z wewnątrz nie wysyłał nic na te docelowe adres i port. Jeśli wysyłał - kieruje pakiet na wewnętrzny adres i port, z którego wcześniej odbywała się komunikacja (zakładając, że to odpowiedź na "połączenie" nawiązane z wewnątrz sieci). Jeśli nie znajdzie w tabeli odpowiednich wpisów ani nie ma odpowiedniej reguły przekierowywania portów - odrzuca pakiet.
A czy jest gwarancja, że to zadziała przy wszystkich dostępnych na rynku routerach i we wszystkich poprawnych home-made konfiguracjach? Pytam bo nie wiem, a też mnie temat interesuje. W szczególności zakładam, że jak router dostaje zbyt duży spam danych, albo po prostu pracuje za długo, to może sobie takie wpisy czyścić i może się potem coś pomieszać (router dostanie "odpowiedź" po UDP, ale w międzyczasie wpis wymaże i pakiet zgubi).

14
OpenGL / Odp: GLSL, Vertex Shader, in struct
« dnia: Marzec 30, 2016, 18:04:06 »
Rację ma przede wszystkim w tym przypadku Khronos, rozdział 4.3.4 jest o wejściach shadera. Tak już bardzo konkretnie cytując przytoczony dokument:
Cytuj
Vertex shader inputs can only be float, floating-point vectors, matrices, signed and unsigned integers and integer vectors. Vertex shader inputs can also form arrays of these types, but not structures.
Także wygląda na to, że przynajmniej w tym przypadku nVidia jak to ująłeś "dość 'łagodnie' trzyma się zasad GLSLa". Opieram się tu o dokumentację wersji 3.3 której używasz jak wnioskuję po `#version 330 core`, ale z tego co widzę, w wersji 4.5 która jest zdaje się najświeższą, niewiele się zmieniło w tej kwestii.

15
C++ / Odp: Problem ze złożonym dziedziczeniem
« dnia: Marzec 18, 2016, 13:23:27 »
Mnie się wydaje że przekombinowujesz. Chcesz osiągnąć jakąś funkcjonalność i próbujesz to zaimplementować, a później wychodzi Ci interfejs-potworek. Najpierw zaprojektuj sobie proste API jakie Cię interesuje i potem się można zastanowić jak je osiągnąć.

Strony: [1] 2 3 4 5 ... 47