Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2010, 19:33   #81
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Да, пример чата, по второй части с передачей буфера типа Byte, легко приспосабливается под on-line игру, ...но нужно помнить, что сервер должен иметь "прямой" (белый, чистый, какой он там еще по сленгу...) IP-адрес, если провайдер затирает ваш Интернет-IP внешним, то через Интернет такой сервер найти будет невозможно, ...только по LAN будет работать всегда.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 23.02.2010, 19:37   #82
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

Ну до рабочего сервера еще как до Пекина ползком...
Сначала нужно сделать для локальной сети, ну а потом, наверное, можно найти такого провайдера, который позволяет получить нормальный IP.
Ckomoroh вне форума Ответить с цитированием
Старый 23.02.2010, 19:42   #83
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Ckomoroh Посмотреть сообщение
Ну до рабочего сервера еще как до Пекина ползком...
Сначала нужно сделать для локальной сети, ну а потом, наверное, можно найти такого провайдера, который позволяет получить нормальный IP.
Не скажи, ...LAN TCP/IP клиент-серверная структура, кто-то из участников игры обязательно будет сервером, как во всех играх по сети, и выполнить серверную часть нужно первым делом. Затем, по имеющемуся протоколу пытаться соединиться с сервером и отправлять ему запросы, ...т.е. вся сеть "растет с головы".
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 24.02.2010, 15:37   #84
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

Теперь можно уточнить, что должен делать игровой сервер?
Пока буду делать танчики многопользовательские.

Будет 3 команды - 1 танк подвинулся, 2 - танк выстрелил, 3 - танк помер.
Теперь организация игры:
При нажатии кнопки клиент отсылает на сервер буффер из 5 переменных(№ игрока, комманда, № анимации, параметры). Сервер получает сообщение, проверяет возможно ли это действие, если возможно, то отсылает сообщение все пользователям(и тому который послал), что танк № такой-то начал действие такое-то с такими-то параметрами. Клиент получает сообщение и запускает соответствующую процедуру.
Я все правильно написал?
Ckomoroh вне форума Ответить с цитированием
Старый 24.02.2010, 15:45   #85
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
1 танк подвинулся, 2 - танк выстрелил, 3 - танк помер.
Если считать жизни на локальном компьютере - то можно обойтись без "мертвечины".
Цитата:
(№ игрока, комманда, № анимации, параметры).
А анимация зачем? Создайте переменную на локальном.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 24.02.2010, 15:58   #86
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
По умолчанию

Как же? о послать всем клиентам, что танк такой-то помер и прибавить очки к танку который победил?
Про анимацию, как локальный компьютер поймет, что этот игрок развернулся? Или например у именно этого игрока желтый танк?
Ckomoroh вне форума Ответить с цитированием
Старый 24.02.2010, 16:03   #87
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Как же? о послать всем клиентам, что танк такой-то помер и прибавить очки к танку который победил?
Если вы послали выстрел на танк, обработайте сыбытие уменьшения жизней танка на локальном компьютере - уменьшите количество передаваемого трафа.
Цитата:
Или например у именно этого игрока желтый танк?
При старте дайте всем элементам боя индексы. Для сервера это просто будут цифры, а для локального игрока - объекты.
Цитата:
Про анимацию, как локальный компьютер поймет, что этот игрок развернулся?
При посылании сигнала посылайте 2 бита на направление:
Код:
00 - Up
01 - Down
10 - Left
11 - Right
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 25.02.2010, 16:00   #88
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Стоп, стоп, стоп!
Во-первых, никаких битов, тип понятный - Byte, пакет числится как NetBuf: TByteArray, доступ к каждому байту через привычное обращение NetBuf[i].
Во-вторых, ВСЕ (!) математические вычисления и обновления игрового мира выполняются НА СЕРВЕРЕ (!), ...клиент шлет только запрос, что он хочет сделать (но не команду), сервер при этом не подчиняется на прямую, а проверяет запрос. Вначале на идентификацию клиента, затем на идентификацию команды, затем на соответствие координат действительности, затем на возможность маневра, ...и только после этого выполняет преобразование и рассылает уже управленческую команду всем, включая того, кто запросил свое изменение. Эта модель эффективна и для on-line. Запомните, ни один из клиентов не может и не должен получать управление сервером непосредственно, или жранить у себя системные переменные, от которых зависит его дальнейшее будущее в игре.
В-третьих, где ваш собственный тип игрового объекта? ...если он есть, то в нем должны быть записи на счет типа и вида игрока, там же и принадлежность к стороне (красный, желтый, зеленый, синий и т.д.). Кроме того, должна быть запись в размере 1 байт, указывающая состояние игровых объектов, ...у вас 256 вариантов, что делает объект в каждый такт игры. Еще одна запись, также 1 байт, какой тип анимации применен, ...еще одна запись, 1 байт, какой текущий кадр, и т.д. У вас вне зависимости от сети, объект должен иметь исчерпывающий набор записей о своем состоянии, по которому в любой момент с объектом можно будет творить все, что позволяет игра. И в тот момент когда игра начнется, каждый игрок получит n-ое число пакетов, по числу игроков, в которых описаны все параметры объектов: какой тип, какой подтип, сторона, анимация, текущий кадр, где был, что делал и пр. пр. пр. Все это измеряется в пределах сотни байт, ...в начале игры - это сущие копейки даже для Интернета, ...затем в процессе игры будут бегать по сети пакеты размером до 2-х десятков байт (смотря как подойдет к оптимизации разработчик).

Далее, номер команды, 1 байт - уже огромные возможности сулит, тут 256 вариантов запросов и ответов сервера на них.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 26.02.2010, 12:15   #89
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
Печаль Я в панике! Ничего не выходит!

Пока что решил отложить сервер на потом и занятся оптимизацией РПГ.
Но почему-то выходит не все хорошо. Как мне и посоветовали сделал банк текстур - одномерный массив (mapbit:array[0..246] of tbitmap (пока что у меня 246 текстур)). После чего заполняю его текстурами. Далее есть массивы (UInteger:array[1..30,1..40] of integer - текстуры, UMask и URoof - соответственно маски и крыши). Как все выводится на экран
в цикле по промежутку где стоит герой
Код:
buf.canvas.draw((m-1)*32,(n-1)*32,mapbit[UInteger[n,m]]);
if UMask[n,m]<>0 then
  begin
  mapbit[UMask[n,m]].transparent:=true;
  buf.canvas.draw((m-1)*32,(n-1)*32,mapbit[UMask[n,m]]);
  mapbit[UMask[n,m]].transparent:=false; 
  end;
if URoof[n,m]<>0 then
  begin
  mapbit[URoof[n,m]].transparent:=true;
  buf.canvas.draw((m-1)*32,(n-1)*32,mapbit[URoof[n,m]]);
  mapbit[URoof[n,m]].transparent:=false; 
  end;
Так вот вчера все работало! я так радовался, так радовался =) А вот сегодня не пашет! Вылетает ошибка при выводе масок - проверил UMask[n,m]>10000!!! Поэтому он и не может обратиться к банку! Ставлю вывод масок в ремарку - все работает, только маски не выводит, а крыши и текстуры нормально... Перелопатил весь код все в порядке! главное в самом начале, когда выводится все на экран, он не ругается на маски - а при передвижении ругается! После чего проверил редактор карт - все сохраняет нормально, все объекты в пределах 1-246. После чего проверил номера текстур в игре - вывело цифру >100000!!! Но на текстуры он не ругается! И выводит их впорядке! И главное вчера все работало! Сегодня запускаю - ничего в той процедуре не менял, а оно как заругается!...
Может это из-за тго что я в типизированный файл сохраняю integer? Но до этого же все работало=(
Я совершенно в тупике...
Жду помощи=)

Последний раз редактировалось Ckomoroh; 26.02.2010 в 21:25.
Ckomoroh вне форума Ответить с цитированием
Старый 27.02.2010, 14:40   #90
Pyton
Пользователь
 
Аватар для Pyton
 
Регистрация: 18.12.2008
Сообщений: 47
По умолчанию

Значение 100000 - предел для integer. Попробуй integer заменить на longint.
Pyton вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание 2d RPG игры VTR Gamedev - cоздание игр: Unity, OpenGL, DirectX 29 19.05.2009 16:34
RPG на Дельфи Juffin Gamedev - cоздание игр: Unity, OpenGL, DirectX 10 10.04.2009 21:37
Создание текстового RPG KORN Софт 3 15.07.2008 09:21
3D-RPG Кронос Gamedev - cоздание игр: Unity, OpenGL, DirectX 25 12.05.2007 11:21