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 - Xender

Strony: [1] 2 3 4 5 ... 138
1
Narzędzia / Odp: Ratgut - Generator terenu
« dnia: Kwiecień 24, 2016, 15:05:36 »
Fajne.

Zopensourceujesz?

2
Sieć i multiplayer / Odp: Gra 2d, udp czy tcp?
« dnia: Kwiecień 17, 2016, 09:57:34 »
@up - Tak, trzeba sprawdzać kolejność i to, czy krytyczne dane doszły ręcznie.

Patrzyłeś na tę bibliotekę, którą podlinkowałem wcześniej?
Cytuj
The primary feature it provides is optional reliable, in-order delivery of packets
W zakładce Features masz też sporo ciekawych informacji.

Nie mówię, że musisz od razu użyć tej konkretnej libki, ale zaznajom się dobrze z tym, co ona implementuje (skoro jakiś mechanizm jest wyszczególniony jako funkcjonalność, to znaczy, że UDP go nie zapewnia) - chociażby żeby zobaczyć "jak to robią inni" (chociaż nadal nie polecam reimplementowania wszystkiego samemu).

3
Sieć i multiplayer / Odp: Gra 2d, udp czy tcp?
« dnia: Kwiecień 15, 2016, 19:42:25 »
...Otwórz UI swojego routera i pójdź do sekcji Port Forwarding lub podobnej?

No to mówimy o 2 zupełnie różnych rzeczach.

Wszystko, o czym mówiłem w poprzednim poście, to tymczasowe tablice NAT na potrzeby dwustronnej komunikacji w ramach połączeń wychodzących (z LAN do WAN/internetu).

- Host w LAN wysyła pakiet UDP lub otwiera połączenie TCP z IP_LAN_hosta:port_LAN_hosta na IP_WAN_serwera:port_WAN_serwera.
- NAT musi dokonać, jak nazwa wskazuje "translacji adresu sieciowego" (bo od strony WAN ma przydzielone 1 adres, a w LAN ma N hostów, każdy ze swoim adresem).
No więc nowy pakiet leci z IP_WAN_routera:port_na_potrzeby_NAT na IP_WAN_serwera:port_WAN_serwera.

- Kiedy przyjdzie pakiet z IP_WAN_serwera:port_WAN_serwera na IP_WAN_routera:port_na_potrzeby_NAT, to NAT zakłada, że jest to odpowiedź w ramach tego samego połączenia.
- Pakiet po translacji leci z IP_WAN_serwera:port_WAN_serwera na IP_LAN_hosta:port_LAN_hosta i jest routowany w obrębie LAN.

Żeby móc dokonać translacji na pakietach przychodzących, NAT musi przy inicjalizowaniu połączenia wychodzącego (z LAN do WAN) (TCP) lub pierwszym pakiecie wychodzącym (UDP) zapisać sobie w tabeli, jakim 4-krotkom IP_LAN_hosta:port_LAN_hosta -> IP_WAN_serwera:port_WAN_serwera (po stronie LAN) odpowiadają jakie 4-krotki IP_WAN_serwera:port_WAN_serwera -> IP_WAN_routera:port_na_potrzeby_NAT (po stronie WAN).


(Tak przy okazji - NAT nie jest obowiązkową częścią routingu, a "dodatkiem" (nawet nie wiem, czy nie dość "niestandardowym", mimo, że jest tak powszechny) - dlatego w paru miejscach napisałem, że po translacji pakiet routowany jest dalej (do innej podsieci)).

4
Sieć i multiplayer / Odp: Gra 2d, udp czy tcp?
« dnia: Kwiecień 15, 2016, 17:47:15 »
@hashedone - Nie ma gwarancji, są tylko dobre chęci. :P

Są różne typy NAT w routerach.
Np. popularne w grach jest zestawianie połączenia p2p dwóch klientów za NAT-em z pomocą serwera tylko w pierwszej fazie. Nazywa to się różnie:
- NAT hole punching
- NAT puchthrough
- UDP hole punching
I często to działa, ale gwarancji nie ma.


UDP z definicji jest bezpołączeniowe, więc nie ma żadnych gwarancji nawet teoretycznie. NAT najpewniej po jakimś czasie nieaktywności stwierdzi, że sprawa jest historyczna i sprzątnie stare wpisy. Zwłaszcza, że w UDP nie ma połączenia, które można by zamknąć, by powiedzieć NAT-owi explicite, że może sprzątnąć rekord.

W TCP w praktyce... sprawa wygląda tak samo, jak z UDP. :)
W idealnym scenariuszu NAT może sprzątnąć rekord, gdy przyjdzie do niego pakiet z flagą FIN, czyli oficjalna informacja o zamknięciu połączenia.
W rzeczywistości zdarzają się i sytuacje "nieoficjalne" - host (cały komputer/system) się scrashuje albo zawiesi, zostanie odcięte od niego zasilanie, kabel ethernet przestanie kontaktować - żadna z tych sytuacji nie powoduje otrzymania przez router informacji o zakończeniu połączenia.
O ile jeśli w międzyczasie druga strona spróbuje coś wysłać, to problem szybko wyjdzie na jaw (brak potwierdzeń od odbiorcy), to w wypadku, gdy i druga strona będzie milczeć, jedyne, co NAT może zrobić, to ztimeoutować połączenie.

Nie wiem, czy TCP samo w sobie ma jakiegoś keepalive'a, którego można po prostu włączyć.
Za to słyszałem o keepalive na poziomie np. HTTP, czyli zatroszczenie się o niego samemu (lub sprawdzenie, czy jest już w jakiejś libce) brzmi jak dobry pomysł.
// EDIT: Znalazłem coś o keepalive w TCP pod Linuxem: http://www.tldp.org/HOWTO/TCP-Keepalive-HOWTO/index.html
Mimo wszystko, jeśli chce się mieć coś działającego w każdych warunkach (pod różnymi i różnie skonfigurowanymi systemami), to keepalive w warstwie aplikacji nadal brzmi jak dobry pomysł.


Mapowanie host wewnętrzny -> port to permanentna konfiguracja NAT-a. Otrzymując pakiet na port, o którym informacji nie ma jeszcze w cache'u, router może po prostu zajrzeć do tej konfiguracji.
Mógłbyś podlinkować jakieś źródło?
Mi się wydaje, że jest to rzecz raczej efemeryczna.

Prawie na pewno nie jest permanentne pomiędzy rebootami routera, bo wtedy nawet adresy hostów przydzielane dynamicznie* przez DHCP są różne.
Jak często rebootowany/wyłączany jest router? W sieciach profesjonalnych, ew. firmowych pewnie bardzo rzadko, w domowych - nawet bardzo często.
Czy jest permanentne w czasie działania routera - mam wątpliwości.

* To nie jest pleonazm, bo często można sobie skonfigurować DHCP tak, że danemu MAC będzie zawsze przydzielał konkretny adres, wpisany podczas konfiguracji, także po reboocie - ale to przypadek szczególny.

5
Sieć i multiplayer / Odp: Gra 2d, udp czy tcp?
« dnia: Kwiecień 15, 2016, 12:07:04 »
Przez "IP" miałem tu na myśli protokół IP i to co znajduje się w jego nagłówku.
IP nie ma portów, one pojawiają się dopiero na warstwie transportowej*.
Czyli UDP/IP lub TCP/IP, bądź innych.

Na tej warstwie są tylko adresy:
https://en.wikipedia.org/wiki/IPv4#Packet_structure
https://en.wikipedia.org/wiki/IPv6_packet

Na tej warstwie są tylko porty (adresami zajmuje się warstwa internetu*, która leży niżej):
https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure
https://en.wikipedia.org/wiki/User_Datagram_Protocol#Packet_structure

* Używam tu terminologii Internet protocol suite, kompletnie ignorując model protokołów OSI, które były konkurencją dla IP suite - nie bądźmy jak profesorowie-dinozaurowie, nie mieszajmy pojęć.

No tak, że o slow start czy 2-way vs. 3-way handshake nie wspomnę. Tylko czy uważasz, że OP potrzebuje (i wie, że potrzebuje) się o to martwić? :)
Myślę, że nie potrzebuje, ale wspomniałem o tym w kontekście gotowych bibliotek (ENet lub inne) - mając taką, nie musi puszczać chatu osobno po TCP, tylko może jej użyć do wszystkiego.

Ogólnie ja bym się mocno porozglądał za istniejącymi bibliotekami, bo problematyka jest szeroko znana, generyczna i nietrywialna - idealny materiał na libkę. Jestem przekonany, że nie jedna i nie dwie powstały i każdy znajdzie coś dla siebie.


co do dwóch klientów na tym samym kompie to server może im przypisać różne id które potem będą dodawać do swoich pakietów
Będą miały różny port źródłowy, nic nie trzeba dopisywać (choć można).

Tak samo z klientami z 2 różnych komputerów za NAT-em (np. typowym konsumenckim routerem) - router ma własną przestrzeń portów, którą przypisuje różnym połączeniom**.

** 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.

6
Sieć i multiplayer / Odp: Gra 2d, udp czy tcp?
« dnia: Kwiecień 14, 2016, 22:23:17 »
Pakiety UDP -- jak wszystkie ramki IP -- zawierają adresy źródłowe, więc możesz używać ich do identyfikowania graczy.
"Adres" owszem, ale nie w rozumieniu adresu IP, a instancji struct sockaddr, które w wypadku IPv4 zawiera też port źródłowy, a w wypadku UPv6 inne dodatkowe pola.

Do chatu zdecydowanie chcesz TCP, niezależnie od tego jak przesyłasz dane samej rozgrywki.
Czemu "zdecydowanie"? Mając jakiekolwiek warstwę połączeniową nabudowaną na UDP (która przyda się też do innych rzeczy w grze) można puścić po tym samym.
A nabudowanie własnej warstwy połączeniowej na UDP pozwala uniknąć problemów TCP-a (np. jego congestion control).

Chcę na tym samym porcie, bo chcę server trzymać na jednym porcie.
Z tego, co wiem, porty TCP i UDP mają dwie osobne przestrzenie portów - nie ma czegoś takiego jak TCP i UDP na jednym porcie, port TCP 8000 i UDP 8000 są od siebie niezależne.

A co to tych ramek, to nie będzie problemu jeżeli będą łączyć się dwa komputery z tej samej sieci? Albo klienty odpalone na tym samym hoście?
Ramki należy identyfikować po 4-tuple: adres źródłowy, port źródłowy, adres docelowy, port docelowy.
W przypadku TCP, system operacyjny to załatwia - ma się jeden socket nasłuchujący, na którym w pętli zdarzeń woła się accept(), gdy tylko coś się na nim pojawi. accept() czeka* na przychodzące połączenie TCP (3-way handshake, te sprawy) - i jak takowe zostanie nawiązane, to zwraca nowy socket dla tego konkretnego połączenia.

*Jeśli ma się normalną pętlę z selectem, to nie czeka, tylko przetwarza dane, które już na tym sockecie czekają (wiemy, że czekają akurat na tym, bo select() tak powiedział).

UDP "nie wymaga" pętli z accept() - z drugiej strony, spotkałem się gdzieś choć raz z informacją, że accept() jako takiego nie zabrania.
Używa się np. recvfrom().

https://en.wikipedia.org/wiki/Berkeley_sockets#Client-server_example_using_TCP
https://en.wikipedia.org/wiki/Berkeley_sockets#Client-server_example_using_UDP


--- (TL;DR:) ---

A jak już przebrnąłeś przez te "akademickie" rozważania, to masz gotowca: :)
http://enet.bespin.org/

7
Projekty zaawansowane / Odp: Edytor nodów - do różnych zastosowań
« dnia: Kwiecień 07, 2016, 21:28:16 »
Dzięki.

Hmm, FAQ Mono twierdzi, że powinno działać.


No, bardziej szczegółowa dokumentacja byłaby miła.

Jakbyś chciał ją rozbudować do poziomu, gdzie jeden plik Readme przestaje wystarczać, to z punktu widzenia osoby czytającej dokumentację, Sphinx daje bardzo przyjemny wynik (chociaż nie wiem, czy da się go w ogóle użyć do C# - ale chyba powinno się dać).

Za to w takim np. Doxygenie przytłacza to, że jest to wygenerowany listing klas i metod z osobnymi kawałkami opisów do każdej, nie ma w ogóle poczucia spójności, że czyta się opis jakiejś całości, tylko wszystko takie rozczłonkowane.

Wspominam o tym, bo nie wiem, jakie są narzędzia wspomagające dokumentację C#, ale przestrzegam przed katastrofą, jaką skutkuje zwalenie całego zadania na automat - niestety, dobre docsy to kupa roboty, ale użytkownicy będą wdzięczni!

8
Projekty zaawansowane / Odp: Edytor nodów - do różnych zastosowań
« dnia: Kwiecień 07, 2016, 18:30:29 »
Zadziała w Mono pod Linuxem? (Natywnie, nie pod Wine z .NET Frameworkiem.)

Bo wygląda zacnie i nawet mam pomysł, do czego by tu wykorzystać... :)

9
Poszukuję / Odp: [Poszukuję] Mentora Unity5
« dnia: Kwiecień 06, 2016, 17:48:53 »
A patrzyłeś, czy w Twoim mieście na jakiejś uczelni nie działa jakieś koło twórców gier?

Jeśli tak, to nie powinni mieć problemu z przyjęciem nawet kogoś "z zewnątrz" (jeśli zależy Ci na chodzeniu na spotkania i wspólnym robieniu gier, a nie koniecznie na formalnym członkostwie, bo z tym może być gorzej).


I nie porywaj się od razu na MMORPG...
- MMO są są chyba jedną z technicznie najtrudniejszych mechanik.
- RPG to o wiele więcej contentu niż w gatunkach, gdzie większy nacisk jest na akcję. Bo gracza trzeba czymś zająć, przy czym jest w miarę obojętne, czy będą to strony dialogów, czy klikanie w kółka. Przy czym wydaje mi się, że dialogi to o wiele więcej roboty.

Połączenie "osoba początkująca w gamedevie" + "MMORPG" stało się już bardzo niesławne - raczej nie bez powodu.

Oczywiście, pojedynczy twórca potrafi zrobić coś naprawdę ciekawego - ale musi konkurować pomysłowością/oryginalnością, bo na polu surowej siły przerobowej (roboczogodziny) nie ma ze studiem pełnym profesjonalistów żadnych szans.
Popatrz na Superhot czy McPixel (i resztę - bardzo wesołej - twórczości Sosa :) ).

Powodzenia.

10
OpenGL / Odp: GLSL, Vertex Shader, in struct
« dnia: Marzec 31, 2016, 15:43:35 »
Rozumiałbym ich zagranie, gdyby byli monopolistą i wszystkie pecety miałyby ich grafiki, ale w aktualnej sytuacji robienie bajerów które na 100% wysypią program u wielu osób nie jest dobrym pomysłem.
Zaczynam tęsknić za CG.

O ironio. :)

Fajnie, że akurat złożyłeś te 2 myśli ze sobą, bo z tego, co kojarzę, historia wyglądała tak:
nVidia tworząc kompilator GLSL nie pisała go od zera, tylko wzięli swój istniejący kompilator HLSL/Cg i dostosowali tak, żeby łykał całość składni GLSL.
W tym miejscu nie troszczyli się za bardzo, żeby przepuszczał tylko rzeczy dozwolone przez standard, a przy innych zgłaszał błąd. Więc jest to podobno sprawa nie tyle bajerów, a niedodawania sobie roboty.

Ale szczegółów ani źródła historii nie kojarzę, pamiętam, że ktoś coś takiego pisał właśnie tu na Warsztacie, więc można traktować jako plotę albo poszukać samemu. :P

11
Projektowanie kodu / Odp: C++ manager
« dnia: Marzec 29, 2016, 22:16:42 »
@lethern: +1, a kontynuując tę myśl - obowiązkowy link: http://forum.4programmers.net/C_i_C++/162017-SOLVEDc++Klasy_zaprzyjaznianie_i_dostep_do_siebie?p=642607#id642607

W tym momencie tak, czy siak, przy implementacji takiego loadera muszę mieć dostęp do listy teksturek i teraz nie wiem, czy przekombinowałem, czy może wywalić te teksturki z Managera do jakiegoś singletona może (?)

Co o tym w ogóle myślicie ?

No ten Manager od początku brzmiał jakoś globalowato*.
To jak teraz masz, każda kontrolka ma swojego?

Może rzeczywiście zrób z niego globala*/singletona, tylko jak chcesz "ładnego, obiektowego" singletona, to najlepiej odpuść leniwą inicjalizację na rzecz zwykłej funkcji inicjalizującej wołanej raz na początku maina - kolejność inicjalizacji rzeczy w programie lepiej mieć pod kontrolą.

* Jeśli Twój program ma wątki - rozważ, czy "global" powinien być globalny, czy thread-local / czy i kiedy singleton (które jego metody?) ma być bezpieczny dla wątków.

12
Takie rzeczy jak obsługa lin, sprężyn itp to podstawy nawet w książkach o nauce programowania gier. Obsługa poruszających się obiektów? No nie wiem, najbardziej kontrowersyjne może obsługa materiałów wybuchowych, reszta wcale taka dziwna nie jest dla osób w tym biznesie.
No to zaimplementuj sobie to wszystko sam wg. książek, albo zobacz, ile czasu zajęło to firmom, które zatrudniają setki doświadczonych ludzi.
A skoro te firmy już to zrobiły i udzielają licencji na dość atrakcyjnych warunkach, to czego tu jeszcze szukasz, zamiast robić swoje 10 gier?

Co za różnica licencja, wynajem ? Kwestia doboru słów, silnik chce wykorzystywać komercyjnie i to się liczy, wątpię by ktokolwiek zajmował się tutaj tworzeniem własnych licencji, nawet licencja "wykorzystywanie komercyjnie za zgodą autora i procencie zysków" w polskim prawie nie przechodzi - wszystko ma być obarczone umową cywilnoprawną lub b2b.
Tak, mówimy o kwestiach prawnych, kwestia doboru słów ma tu znaczenie, jak nigdzie indziej.

"Nie znam się to się wypowiem, a że chcę zabrzmieć mądrze 'biznesowo', to wrzucę skrót 'b2b'".

Nie użyje openSource bo wyobraź sobie że nie spełniają moich oczekiwań, inaczej bym nie szukał kogoś kto ma gotowy silniczek.
To bierz Unity/UDK.

JEST TO OGŁOSZENIE W KTÓRYM POSZUKUJE GOTOWEGO ROZWIĄZANIA
To użyj gotowego rozwiązania.

Raczej nikt nie kitra po piwnicy silników, które miałyby zaimplementowaną całą Twoją listę życzeń (czekając na Poważnego Biznesmena, który zaproponuje 5% od zera :D), więc bierz jeden z mainstreamowych gotowców.

13
Kolejny, co z choinki się urwał...
A mamy Wielkanoc. :)

oferta jak najbardziej poważna
Tylko Tobie się tak wydaje.

Witam wszystkich, poszukuje silnika gier 2.5D Windows, do którego masz absolutnie prawa - nie interesują mnie propozycja "kolega kolegi ma" (wtedy poproś kolegę by się ze mną skontaktował ) lub "użyj darmowego" itp
Brzmisz, jakbyś nie miał o tych sprawach pojęcia.

To Ci nakreślę realia rynkowe:
Silniki/frameworki tworzą:
1) Duzi Gracze - firmy, które zjadły na tym zęby, i to one określają warunki, na jakich Ci udzielą licencji (chyba, że jesteś Równie Dużym Graczem, to możesz negocjować). I tu masz:
- Unity
- UDK
- CryEngine
itp.

2) Entuzjaści (osoby prywatne lub mniejsze firmy), które udostępniają swoje dzieło jako Wolne Oprogramowania lub Open Source:
- Godot Engine
- Frameworki do poszczególnych zadań, jak Cocos, Box2D itd.

Za to nie znam żadnego "kolegi kolegi", który napisałby sobie w domciu taki silnik, jaki chcesz.
Ani żadnej pojedynczej osoby prywatnej w ogóle.

Moja propozycja to 50-100zł za wynajem ( opłata jednorazowa ) + 5% z każdego egzemplarza gry stworzonego na tym silniku ( umowa )
Twoja propozycja finansowa opłaty jednorazowej jest śmieszna - w rozwiązaniach obecnych na rynku albo tej opłaty jednorazowej nie ma w ogóle (tylko %), albo jak jest, to raczej zaczyna się od dziesiątek tysięcy dolarów (liczba z sufitu), a nie 100zł.

Nie istnieje coś takiego, jak "wynajem" praw autorskich. Są licencje, które zawsze szczegółowo określają, co można, a czego nie można robić, a różne licencje są od siebie bardzo różne. Bardzo.

Twoja propozycja procentu z zysków brzmi już sensowniej.


Konkluzja: użyj jakiegoś Open Source, a jeśli żaden z nich Ci nie odpowiada, to użyj Unity/UDK/podobnego.
Tylko tam to producent silnika określa zasady licencji i procent zysków, jaki chce, nie Ty.

Od silnika oczekuje :
- Przede wszystkim dokumentacja ( j. polski )
Naucz się angielskiego albo zatrudnij kogoś kompetentnego, będzie dużo prościej.

O wyborze będzie decydować:
...
Obawiam się, że jednak to Ty będziesz musiał się naszukać na internecie, które z ogólnodostępnych rozwiązań spełnia Twoje wymagania, a nie będziesz dokonywał selekcji na ofertach w swojej skrzynce mailowej, bo żadne oferty Ci raczej nie przyjdą.

Serio, nie jesteś sędzią w konkursie telewizyjnym, żeby używać takiego tonu.

Silnik może być dostarczony w formie .dll (preferowany format )
Wisienka na torcie. :D
"Chciałem, żeby to zdanie zabrzmiało dogłębnie technicznie, ale nie wyszło".

chciałbym aby zostało mi lub osobom, którym zlecę wykonanie produkcji jedynie sprawy związane z "wymyśleniem" gry, czyli zaprojektowanie postaci, ustawienie mapy, wstawienie dźwięków.
Zdecydowanie w takim razie chcesz gotowca, jak Godot/Unity/UDK.
Dłubaninę z frameworkami jak Cocos bym sobie w takim razie darował - może to już wiesz, może nie.

14
Aha, no i współczynniki raczej "przypadkowe" niż okrągłe liczby - dodanie do siebie harmonicznych niekoniecznie będzie ładnie wyglądać - raczej zbyt symetrycznie,sztucznie.

15
Jak już jesteśmy przy Perlinie, to zachęcam pogrzebać w artykułach tutaj:
http://www.iquilezles.org/www/index.htm

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