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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2010, 11:24   #1
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию создании карты для ММОРПГ

Добрый день! Разрабатываю карту для игры.. игра жанра ММОРПГ
Есть идейка.. сделать примерно так
000К00
00к0Д0
00П000

К- камень
к- маленький камень
П- персонаж1
Д - персонаж2
Скажем как двухмерный массив стринг
При движении персонажи будут перемещаться по карте....
Возникли вопросы: как сильно будет грузить систему...
Проблема с размерами.... скажем камень большой имеет 200 на 100, а маленький 100 на 50, а персонаж 50 на 100 те координаты глобальные будут динамические что не есть гуд... пока проблем нету, но кажется могут возникнуть...
Есть более грамотное решение?
идейки...
dampirik вне форума Ответить с цитированием
Старый 04.03.2010, 15:59   #2
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от dampirik Посмотреть сообщение
Есть более грамотное решение?
идейки...
Полный раздел, ...учимся искать. Про карту в "Уроки по созданию игр для новичков", про конкретные игры - в разделе именованные проекты участников форума.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 04.03.2010, 19:05   #3
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Читал... может что-то не понял.... имеется карта как и написал... в ней находятся квадратные модельки из которых формируется текстура игры...
НО я хочу отображать своего персонажа на ней и других персонажей... динамически... такого не видел(1 вопрос)
И второе:те скажем 10 человек заходят в одну локацию, то локация по х,у сильно меняется... что не есть гуд... обсуждения такого или близко я не видел...
Если поданным вопросам нету нечего... конструктивного то дальше буду искать... и "медитировать"
dampirik вне форума Ответить с цитированием
Старый 04.03.2010, 20:43   #4
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Суть в том, что игра не должна делиться на сетевую или не сетевую, ...ее структура построена так, что в любой момент, благодаря записям, каждый объект может быть переведен в любое состояние, которое позволено правилами игры и "техническими" возможностями кода.
Проблемы начинаются при создании игрового протокола, ...т.е. системы взаимодействия сервера и клиентов. В этом протоколе числятся сотни типов запросов и ответов сервера на них.
Работает все просто. При входе в игру, пользователь получает карту в виде массива данных, ...это статический шаблон, по мере изменения состояния некой карты или, как принято называть, локации, пользователь получает дискретные пакеты информации, что конкретно и как изменилось, ...при этом нет полной перерисовки местности, только выборочно, это экономит трафик и ресурсы сервера.
В клиентском приложении вам понадобятся несколько массивов, как и для не сетевой игры: местность, объекты, персонажи, маркеры. Каждый из массивов образован матрицей или списком и описан собственным типом записей. По мере поступления информации матрицы и списки обновляются выборочно. Например, в локацию входит персонаж, ...вот технически как будет принимать его другой клиент, через сервер:

Сервер прислал команду: команда Х, новый персонаж, тип, подтип, вид, точка появления, координаты перехода, личные параметры;

Сначала стоит создать не сетевую игру, с полным набором параметров управления каждым объектом, а потом уже задумываться о сети.

В теме "Уроки по созданию игр для новичков" есть описание типа игрового объекта, есть алгоритмы перемещения объектов в зависимости от смены параметров, есть структура хранения и использования данных карты, есть методы эффективного использования кодировки.

String выкиньте сразу, пользуйтесь только в крайних случаях.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 04.03.2010, 21:25   #5
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

По поводу сетевой это планы на будущее-) но все-равно не стоит про это забывать сразу при разработке.
Сейчас рассматриваю как рас взаимодействие объектов... и написание карты.
На данный момент есть анимированный персонаж, который передвигается по карте...есть камни, на которые он вступать не может...
Камни содержаться в массиве данных, я вот думаю если добавить этого персонажа в этот массив то будут меняться координаты расположения этих камней... а это не есть хорошо...а создавать второй массив... для динамических объектов... пока не знаю...думаю..
А чем Вам не нравиться String?
dampirik вне форума Ответить с цитированием
Старый 04.03.2010, 22:11   #6
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от dampirik Посмотреть сообщение
...но все-равно не стоит про это забывать сразу при разработке.
Это вы мне говорите ?!

String очень тормозный тип, поскольку в такой записи не определено конечное число символов, ...если нужно, то пишите с ограничением, например String[20], т.е. строка из до 20 символов, включительно, ...лучше PChar, но это сложно.

Цитата:
Сообщение от dampirik Посмотреть сообщение
Камни содержаться в массиве данных, я вот думаю если добавить этого персонажа в этот массив то будут меняться координаты расположения этих камней... а это не есть хорошо...а создавать второй массив... для динамических объектов... пока не знаю...думаю..
Камень - объект статический, он лежал до персонажей и будет лежать при них и после них. Персонаж - объект динамический, в системе числится как пункт списка или одномерного массива. В процессе поступления команды с сервера, по коду в списке отыскивается динамический объект и изменяются его параметры, не затрагивая карту вообще никак, потому, что это не нужно делать без надобности. Графический "движок" сначала нарисует поверхность карты, затем из списка все динамические объекты с их положением и параметрами.

Что значит "персонаж на камень встать не может"? ...это буквально значит, что сервер приняв запрос клиента, который может указывать и координаты камня, просто отправит команду, что клиент может топать только до камня, но не на него, ...как делает это сервер? ...проверяет запрос, смотрит точку на карте, если там камень, отнимет от координат клетку, и пошлет переназначенный пункт.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 06.03.2010, 13:47   #7
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Сейчас пытаюсь добавить монстров на карту...
Хочу чтобы они свободно перемещались(тк сказать гуляли в заданном квадрате...)
Код:
        bool left = false; 
        bool down = false;
        bool stopX = false;
        bool stopY = false;
//функция перемещения животного
public void Movement(GameTime gameTime)
        {
//прямоугольник в глобальных координатах где будет гулять животное 
            Rectangle screenRectX = Game1.GetScreenRectX(rectPosition);
            Rectangle screenRectY = Game1.GetScreenRectY(rectPosition);
            Rectangle screenRect = Game1.GetScreenRect(screenRectX, screenRectY, rectPosition); 
//его скорость
            int dx = 1 * gameTime.ElapsedGameTime.Milliseconds / 10;
            int dy = -1 * gameTime.ElapsedGameTime.Milliseconds / 10;
//меняем вектор скорости меняем направление
            if (left)
                dx = -dx;
            if (down)
                dy = -dy;
            if (stopX)
                dx = 0;
            if (stopY)
                dy = 0;

            shag++;
//через сто тактовых шагов случайно выбираем одно из 4 значений чтобы изменить направление...
            if (shag == 100)
            {
                Random rnd = new Random();
                int r = rnd.Next(0, 4);

                if (r == 0)
                {
                    if (!left)
                        left = true;
                    else
                        left = false;
                }
                if (r == 1)
                {
                    if (!down)
                        down = true;
                    else
                        down = false;
                }
                if (r == 2)
                {
                    if (stopX && !stopY)
                        stopX = false;
                    else
                        stopX = true;
                }
                if (r == 3)
                {
                    if (stopY && !stopX)
                        stopY = false;
                    else
                        stopY = true;
                }

                shag = 0;
            }


//создаем новый прямоугольник с новыми координатами
            Rectangle nextPositionX = rect;
            nextPositionX.Offset(dx, 0);
            Rectangle nextPositionY = rect;
            nextPositionY.Offset(0, dy);
//проверяем не выходит ли новый прямоугольник за граници прямоугольника движения животного 
//проверяем не сталкивается ли с другими объектами...
            if (nextPositionX.X < screenRect.Right && nextPositionX.X > screenRect.Left
                && nextPositionY.Y > screenRect.Top && nextPositionY.Y < screenRect.Bottom
                && (game.CollidesWithLevel(nextPositionX))
                )
            {
//если не чего такого нету то присваиваемым старому прямоугольнику новые координаты...
                rect.X = nextPositionX.X;
                rect.Y = nextPositionY.Y;
            }
            else
            {
//если же нет меняем направление
                if (!left)
                    left = true;
                else
                    left = false;

                if (!down)
                    down = true;
                else
                    down = false;

                if (stopY && !stopX)
                    stopY = false;
                else
                    stopY = true;

                if (stopX && !stopY)
                    stopX = false;
                else
                    stopX = true;

            }

        }
Но погуляв некоторое время он останавливается и залипает... не двигается...

Последний раз редактировалось dampirik; 06.03.2010 в 13:50.
dampirik вне форума Ответить с цитированием
Старый 06.03.2010, 17:21   #8
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Наверное срабатывают нижние условия и переводят stopX и stopY в True, ну и в самом начале условия стопорят движение if (stopX) dx = 0; и if (stopY) dy = 0; ...если я правильно прочитал сишный код, то все 100 шагов персонаж будет стоять на месте.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 06.03.2010, 17:33   #9
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Ну он как-будто залипает... он может полностью остановиться в некоторых местах.... но 100 шагов это чуть больше секунды...
Сейчас отдельно делаю.... буду дебажить...
dampirik вне форума Ответить с цитированием
Старый 06.03.2010, 21:46   #10
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Работает как и ожидалось....
Походу заходит в "лабиринт" из условий и не может выбраться... буду думать как решить....
dampirik вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2 окна мморпг аляска Свободное общение 14 15.09.2009 18:24
Карты для GPS навигаторов и КПК dawning Софт 0 05.08.2009 17:22
Бот для ММОРПГ SNUPY Свободное общение 11 10.07.2009 21:15
Ошибка в прорисовке карты для игры в танчики NSvirus Паскаль, Turbo Pascal, PascalABC.NET 1 27.02.2009 21:08
Карты для игр L_M Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 16.05.2008 15:08