Faucet Networking, basics |
Здравейте ( Вход | Регистрация )
Faucet Networking, basics |
00:16:18, 24-December-2012, Monday
Коментар
#1
|
|
Мълчаливко Група: Потребител Коментари: 4 Регистриран: 23.12.12 Потребител № 1717 |
Та така...Какво е faucet networking?
Това е сравнително ново extension за Гейм Мейкър,който позволява да се правят мултиплеър игри.Води се по-добро от 39 длл,не съм навътре в тия неща,затова не мога да обясня точно какво му е по-доброто,но да приемем факта за верен,защото самият автор на популярното старо dll казва,че го е написал доста куцо. Та какво трябва да знаем за начало? За начало трябва да знаем,че връзките могат да се извършат с два вида протоколи TCP и UDP.Първият вид ( http://bg.wikipedia.org/wiki/TCP ) е най-разпространеният интернет протокол.Лично аз никога не съм се занимавал с втория вид,затова не смея да говороя за него. Също така трябва да знаем и какво е socket.Сокетът е връзката между клиент и сървър или обратното,чрез която се пращат пакети с дата.Също така имаме бъфери,които "държат" въпросната дата.При 39 длл си има default buffer,а при faucet networking има два бъфера send i receive buffer,които не може да се видят(нямат си имена),но може да се използват.Също така можете и да си направите свой бъфер с фунцкията Код buffer=buffer_create() ,ама да не се задълбаваме в подробности...Също така датата,която изпращаме трябва да има определен размер:Код //Byte = 1 Byte (heh) and can range from 0 to 255. //Short = 2 Bytes and can range from -32768 to +32767. //UShort = 2 Bytes and can range from 0 to +65536 //Int = 4 Bytes and can range from -2147483648 and +2147483647 //UInt = 4 Bytes and can range from 0 and +4294967296 //Float = 4 Bytes //Double = 8 Bytes Например,ако имаме да пращаме живот на играч,който е максимум 100,няма да използваме short,а byte,за да не създаваме излишен трафик... Getting started(Да започваме!) Създаваме server.gmk и client.gmk всяко с по един обект control вътре. Първо пъхаме в create-a control-a на клиента: Код server=tcp_connect("127.0.0.1",7777);//търсим сървър на този адрес После пъхаме в control обекта на сървъра в create-евент: Код listen = tcp_listen(7777);//това е акцептор на всички адреси през този порт На същия обект в степ: Код socket = socket_accept(listen); //търсим клиенти от адреса на акцептора Та сега това "socket" ни се води сокета на клиента,който сме приели.Той приема стойности само,когато се логне клиент,иначе =0... Па сега нека му пратим на клиента нещо... в същия степ евент слагаме: Код if (socket>0) { //send player to client write_byte(socket,1); //1 byte //firstbyte write_byte(socket,5); //1 byte socket_send(socket); //пращаме по сокета на логналия клиент... } write_byte(socket,1); //1 byte //firstbyte- е стойност,която ще получим в едно нещо наречено integer,което се превежда идентификатор(идентифицира,разпознава собщенията)... write_byte(socket,5); //1 byte- е съобщението,което получава клиента като стойност при определен случай на индификатора. socket_send(socket); //пращаме по сокета на логналия клиент... -е това вече е обяснено... Време е за клиента сега.Степ евента на control трябва така да го направиме да изглежда: Код tcp_receive(server,1); msgid=read_byte(server); switch (msgid) //индентификатор { case 1: tcp_receive(server,1); aaa=read_byte(server); break; } Та така.С първото tcp_receive получаваме "write_byte(socket,1); //1 byte //firstbyte",първият байт,който ни е пратен и индификатора различава.От него надолу индификатора казва според стойността му какво трябва да се случи.В нашия случай стойността на msgid=read_byte(server);,което е е получената стойност на write_byte(socket,1); е 1 (case 1:) и е получено по сокета server. Следователно индификатора казва,че нататък трябва да се получи още един байт tcp_receive(server,1);,който го четем aaa=read_byte(server);. Този байт се оказва петицата от write_byte(socket,5); //1 byte . Сега,ако връзката наистина се е получила сложете: Код if variable_local_exists("aaa") { draw_text(50,50,aaa); }; Трябва да се види една петица Ето тука качих това,за което говорих досега: http://www.2shared.com/file/iiVLHt_3/faucettutorial.html? Фауцет се тегли от http://gmc.yoyogames.com/index.php?showtopic=498062 има едно зелено текстче в поста "here".В .zip-a,който изтеглите има и едно pdf ,което ще ви научи на всичко останало... +В това,което съм качил добавих още няколко обяснения,за да е по-лесно. |
|
|
16:59:49, 24-February-2013, Sunday
Коментар
#2
|
|
Мълчаливко Група: Потребител Коментари: 4 Регистриран: 24.02.13 Потребител № 1718 |
Тъкмо което ми трябваше ! Но, да попитам, не разбрах как се изпращат променливи ( и как се разпознават ) .
Примерно, клиент1 променя х с 2, изпраща до сървъра, че е направил това (как ?) , сървъра изпраща на клиент2 и 3 и т.н. , че клиент1 си е променил х с 2 . Може ли да обясниш ? |
|
|
17:27:15, 24-February-2013, Sunday
Коментар
#3
|
|
Редовен бъбривко Група: Администратор Коментари: 661 Регистриран: 08.07.05 Град: Бургас Потребител № 44 |
Това е до твоя протокол. Трябва да си измислиш протокол, по който клиента общува със сървъра.
Примерен протокол е да му кажеш някак си "аз си променихх координатите на x,y" В примерния код променливата msgid може да се ползва именно с такава цел. Ти имаш достъп до функции за пращане и получаване на данни, но вече ти сам трябва да измислиш как да ги ползваш. -------------------- |
|
|
17:39:59, 24-February-2013, Sunday
Коментар
#4
|
|
Мълчаливко Група: Потребител Коментари: 4 Регистриран: 24.02.13 Потребител № 1718 |
Ехх, сега трябва да си напрягам мозъка
Между другото, msgid променлива ли е ? |
|
|
17:41:28, 24-February-2013, Sunday
Коментар
#5
|
|
Редовен бъбривко Група: Администратор Коментари: 661 Регистриран: 08.07.05 Град: Бургас Потребител № 44 |
Код msgid=read_byte(server); Излиза, че е Можеш сам да създаваш променливи, когато си поискаш. -------------------- |
|
|
17:42:48, 24-February-2013, Sunday
Коментар
#6
|
|
Мълчаливко Група: Потребител Коментари: 4 Регистриран: 24.02.13 Потребител № 1718 |
Аха, мерси за помоща, между другото колко хора има в тоя форум седмично/дневно ?
msgid значи е нещо като съобщение на сървъра? ( в този пример) |
|
|
17:47:54, 24-February-2013, Sunday
Коментар
#7
|
|
Редовен бъбривко Група: Администратор Коментари: 661 Регистриран: 08.07.05 Град: Бургас Потребител № 44 |
Както ти обясних в имейла, няма особено активност. А се появи един-двама юзъра, а никой не се появи. Бившите активни потребители общуваме по други методи на комуникация, например Skype и Facebook.
Относно протокола, ти трябва да решиш какво ще се обменя като данни. След това ти решаваш как ще си създадеш пакетите. Пакета е последователност от байтове. В горния пример, msgid е променлива, която чете първия байт от пакета. Според стойността му, ще знаеш какви да са следващите пакети. Трябва както да го измисмиш, така и предварително да си го документираш -------------------- |
|
|
20:22:22, 24-February-2013, Sunday
Коментар
#8
|
|
Мълчаливко Група: Потребител Коментари: 4 Регистриран: 24.02.13 Потребител № 1718 |
Не мога да се справя ! Клиента приема тази стойност дадена в примера само като влезе! Как да го направя да приема постоянно ?
|
|
|
20:56:50, 26-February-2013, Tuesday
Коментар
#9
|
|
Редовен бъбривко Група: Администратор Коментари: 661 Регистриран: 08.07.05 Град: Бургас Потребител № 44 |
Неща ти куца алгоритъма, изглежда. Трябва първо на първо да се научиш да програмираш. Сори че го казвам, но според въпроса ти, така ми се струва. Примера на Zlobarq не е най-подходящ за реални приложения, но след като знаеш кои са ти функциите за четене и запис в сокети, останалото е да си изградиш програмата, която да ги чете. Ако не знаеш как, по-добре недей започвай с мултиплеяр игри, а с нещо, което да ти даде малко или много опит.
-------------------- |
|
|
19:53:45, 01-March-2013, Friday
Коментар
#10
|
|
Засмян тъпоъгълник :D Група: Администратор Коментари: 1790 Регистриран: 21.07.08 Град: Това е място, населено с много хора. FPS: 60 Потребител № 1116 |
Съвет - не си хаби времето с мултиплеър системата на гм, спести си главоболия. Говоря ти от опит. Захвани се с нещо по-сериозно.
-------------------- Цитат Пешо: 4:53:46 Я недейти са карайти тука че да ни ва зашливйъ |
|
|
20:42:30, 15-June-2013, Saturday
Коментар
#11
|
|
Мълчаливко Група: Потребител Коментари: 4 Регистриран: 23.12.12 Потребител № 1717 |
Код msgid=read_byte(server); Излиза, че е Можеш сам да създаваш променливи, когато си поискаш. Значи виж сега пичага,идеята е да се направи индетификатор. Сървъра праща информация и клиента я чете така: Първия байт е ID-то на съобщението-msgid.Както знаем той може да има стойност от 0 до 255.И според неговата стойност клиента продължава по различен начин да прави разни неща. Не помня как точно го бях направил в този екзампъл,но принципно е прави с Цитат switch(msgid) { case число от 0 до 255: правим нещо break; } Ако не знаеш какво прави switch и това ти обияснявам.Switch проверява стойностите на дадена променлива ,прави дадена операция и е по-мързелив вариант от това да правиш if-ове".С други думи,ако ползваш if кода ще излгежда така: Цитат if msgid=число от 0 до 255 {правим нещо} if msgid=друго число от 0 до 255 {правим друго нещо} Та пичага ако имаш въпроси скайпа ми е happy_mudvayne.Аз рядко влизам тук,затова ще ти е по-просто по скайп да питаш.Ама надявам се да знаеш basic работите,защото все още си спомням на 10 годинки как исках да направя "супер якото най-велико MMORPG на света" и до никъде не стигнах...Ааа и да не забравя с гейм мейкър не се правят хубави игри като цяло. @Яверт Еми то аз само с GM мога да работя,тъй като само с компютрите тотално неграмотен.Но пък с Гейм Мейкъра и faucet-а можеш спокойно да се научиш да правиш този тип работи и после като разбереш как работрят да си направиш сериозна игра на някой истински език.Освен това чудото faucetnet се води доста по-бързо от противното и старо 39длл. Ааа и да не забравя този пичага,автора на FAUCET има едно творение: http://ganggarrison.com/ .Макар и demake на team fortress 2 с примитивни графики,игрицата си е супер луда и винаги има играчи в сървърите. |
|
|
Олекотена версия | Час: 03:55:32, 19.05.24 |