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

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

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

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

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

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

Алгоритм, показанный Alex Cones, рушится как только вещь становится не единственного типа: Короткий Меч, Длинный Меч, Двуручный Меч и пр. Вместо этого 2 байта на клетку дадут вам 65535 предметов, возможно лежащих в ней.
Вспомните Morrowind, убиваем монстра, он лежит на карте, в одной клетки, кликаем на него и смотрим в формочке все вещи, что у него оказались. Монстр (моб) подчиняется тем же правилам организации параметров и инвентаря, что и игровой персонаж, за исключением того, что предметы у моба появляются и помогают ему только при его появлении, ...у персонажа - всегда в наличии, и при гибели.
После подтверждения сбора вещей, жмем на закрытие формы и моб исчезает с клетки.
Если нужно выбросить предмет, то он просто вылетает анимацией из персонажа и в воздухе исчезает, ...да, потерялся, что поделаешь.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 24.04.2010, 15:52   #112
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Alex Cones, алгоритм хорош, но имеет определенные границы применимости. Если предметов будет достаточно много, то нужно будет что-то совсем другое.
Как вариант можно в клетку прописывать указатель на массив идентификаторов выпавших предметов. При большом разнообразии предметов и ограниченном количестве предметов, выпадающей за раз, это будет явно эффективней.
Если, скажем, у нас есть порядка 1000 самых разных предметов (разный виды доспехов, шлемов, щитов, оружия, зелий, свитков заклинаний - как стандартных, так и уникальных), то при выпадении за раз не более шести вещей получаем, что нам понадобится 6 * 2 = 12 байт памяти (76 бит), в то время как при кодировании с помощью OR получаем 1000 бит, причем невозможно закодировать наличие двух одинаковых предметов в одной куче.
По-моему, хорошим методом при множественном выпадении вещей, когда их может быть в игре больше 8-16, является создание в клетке, где они выпали "невидимого контейнера" (невидимый в том плане, что выглядеть он будет не как какой-то ящик, а как куча вещей, но внутренняя структура у него будет как у обычного контейнера), в котором есть массив индексов выпавших предметов, ячейка с указанием количества находящегося там золота, еще что-нибудь (например, индикатор пуст/непуст - если пуст, то уничтожается).

АПД. Beermonza, опередили! Кстати, по поводу выброшенных вещей: как я думал про себя пока писал этот пост, хотя сначала и не отметил этого здесь, при выбрасывании предмета можно создавать в той ячейке, где находится персонаж, новый "контейнер", или добавлять выкинутый предмет к имеющемуся "контейнеру" в ячейке. Как альтернатива можно предоставить игроку возможность выбросить предмет на землю или уничтожить ненужный предмет насовсем.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же

Последний раз редактировалось Гром; 24.04.2010 в 15:58.
Гром вне форума Ответить с цитированием
Старый 24.04.2010, 17:08   #113
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Кстати, по поводу выброшенных вещей: как я думал про себя пока писал этот пост, хотя сначала и не отметил этого здесь, при выбрасывании предмета можно создавать в той ячейке, где находится персонаж, новый "контейнер", или добавлять выкинутый предмет к имеющемуся "контейнеру" в ячейке. Как альтернатива можно предоставить игроку возможность выбросить предмет на землю или уничтожить ненужный предмет насовсем.
Давайте представим на минутку MMO, ...да даже и в однопользовательском режиме. В некоторый момент заходим в некоторую локацию, а там все усеяно копеечными пузырьками и свитками, одним словом намусорино так, что некуда ступить, ...вся эстетика теряется, процессору тяжело это все рисовать каждый раз, следить где что лежит, ...оно нам надо?
Пусть мы убили моба и у него куча вещей, что все не помещаются в инвентарь, ...ничего страшного, формочка поделена на 2 поля, одно - инвентарь наш, другое - моба, ...тусуем предметы пока не удовлетворимся результатом, ...хорошо подумав жмем "закрыть", ...все предметы, нас интересующие, в инвентаре, прочие уничтожены. Так же можно сразу закрывать появляющуюся при гибели моба фору, тем самым просто не собирая предметы, если они не заслуживают внимания.
Моб исчезает сразу после клика на нем, а форма с предметами остается сколь-угодно долго, пока ее не закроем.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 24.04.2010, 18:01   #114
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Beermonza, да, во многих играх "выбросить" равнозначно "уничтожить", но отнюдь не во всех. Прямо сейчас мне в голову приходят: тот же самый Морровинд, Baldur's Gate (не помню насчет первого, но второй - точно), Diablo (аналогично - во втором точно), Neverwinter Nights... И все эти игры (кроме Морровинда) поддерживают мультиплеер. Так что, можно с уверенностью говорить, что во всяком случае существуют способы приемлимым образом разрешить данную ситуацию с точки зрения как эстетики, так и нагрузки на аппаратную часть.
Что касается именно ММО-игр, то не знаю, не знаток. Но похоже, что в этой ветке обсуждается игра, заточенная в основном на single-прохождение, а тут во многом другая логика построения и развития мира, нежели в ММО.
Цитата:
Пусть мы убили моба и у него куча вещей, что все не помещаются в инвентарь
Может быть и так, что весь инвентарь у игрока забит очень хорошими вещами, с которыми ну очень жалко расставаться, а тут еще и из какого-нибудь босса выпадает россыпь чего-то равноценного находящемуся в инвентаре. И встает мучительный вопрос: что выбрасывать, а что оставлять? Вот тут перед разработчиком и встает вопрос: помочь игроку не потерять в никуда часть действительно ценных вещей или очень жестко ограничить его выбор размером инвентаря. Если есть возможность оставить часть предметов на земле и потом за ними вернуться, то игрок будет с большим удовольствием ей пользоваться и это будет очень удобно.
Ну или другая ситуация. Возвращаюсь это я из рейда на пещеру контрабандистов, подхожу к торговцу, а он мне: "Ай-ай-ай! Что это у тебя скуума по карманам распихана? Не буду я с тобой торговать, ты нехороший!" А ему и говорю: "Не проблема! Постой тут минуту, я щас!" Захожу я в инвентарь, выкидываю скууму и лунный сахар прямо себе под ноги, снова разговариваю с торговцем, продаю все лишнее, подбираю выброшенное обратно и иду себе довольный дальше.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же

Последний раз редактировалось Гром; 24.04.2010 в 18:13.
Гром вне форума Ответить с цитированием
Старый 24.04.2010, 18:35   #115
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Кстати что получается-то? а то давно обновлений не выходило... =)
dampirik вне форума Ответить с цитированием
Старый 25.04.2010, 00:18   #116
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Гром, ну тут действительно вариантов масса. Если нужно делать игру с выбором что-то найти, что-то потерять, то играть в разы интересней, ...нужно думать, прокачивать характеристики, чтобы таскать рюкзак побольше, покупать домик, сундучок, туда складывать все ценное, если НПЦ нащупает вас переполненным, вам придется сбегать до дому, или что-то выкинуть, а как иначе? ...или нужно превратить игрока в мягкотельца - "все позволено и все возвращается"? ...нет, такого допустить нельзя.
Никакой умный человек не пойдет за добычей полный с ног до головы, ...только с парой тройкой нужных типов амуниции, это не вес основной. Если вещи не уничтожаются, они, ФАКТ, будут разбросаны везде! ...поскольку их деть некуда, и никто не будет их собирать и сдавать в скупку, за мизерной стоимостью, если есть способы быстрее и проще заработать.
Контейнером, как вы говорите, может служить сам моб, если на него не ткнули, он так и будет на карте в режиме "убит", пока его не обыщут, ...о чем я и говорил выше.
В Diablo, кстати, мне не понравилось, что по уровням раскидано барахло, которое не вмещается и не представляет ценности, ...да, видно, что уровень очищен уже кем-то, но не голова ли на плечах существует, чтобы помнить где был а где нет, и есть дневник. И притом, уж извините, опять затрону мультиплеер и MMO, ресурсы должны быть возобновляемыми.
Если обращаться к автору, как ему проще и понятнее на первое время, то лучше, все же реализовать формочную систему и уничтожение предметов, ...или поставить его перед фактом, чтобы не рыться в очередной схематично показанной кучке предметов в одной клетке - необходимо создать систему определения свободного пространства и разбрасывания вокруг персонажа по одному предмету в клетку, как в Diablo, например.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 25.04.2010, 22:26   #117
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Beermonza, безусловно, описанная вами схема хорошо подойдет для ММО-игр (я - не большой их знаток, но знаю, что, например, в Легенде, все работает именно так). Но в сингл-плеерных играх я не вижу особого смысла делать именно так.
Вот, на мой взгляд, почему ваша схема хороша для ММО-игр:
1. Постоянно возобновляемые ресурсы: регулярно респаунящиеся мобы и соответственно регулярно обновляющийся дроп. Соответственно, если будет все время выпадать что-то малоценное, что почти всегда будут оставлять лежать на земле, то очень скоро этого накопится непомерно много.
2. Невозможность оставить вещь "полежать до лучших времен" (пока сбегаешь облегчить карманы в магазин или какой-нибудь свой ящик) - сопрут другие игроки.
3. В некоторых играх имеется не слишком большое разнообразие вещей и при этом экипировка обычно является очень ценным ресурсом и обновляется очень редко (полностью обновляется обычно не чаще одного раза за уровень при длительном накоплении опыта для перехода на следующий уровень). Здесь счет идет на штуки предметов и приобретение одной из них достаточно значимое событие чтобы о нем подумать заранее.
Впрочем,
1. Предметы можно сделать исчезающими со временем. Скажем, моб респаунится раз в 15 минут, а предмет исчезает через 30 минут после выпадения. Тогда в одном месте никогда не будет лежать больше двойной порции дропа с этого моба.
2. [Здесь пусто]
3. Однако, насколько я знаю, такой сценарий обычно реализуется в играх, где вообще нет интерактивной местности как таковой (минимальная единица перемещения игрока - локация, а не один шаг), так что и выбрасывать предметы некуда.
В однопользовательских играх таких проблем нет:
1. Обычно монстры не респаунятся и предметам неоткуда копиться до бесконечности (в Морровинде, правда, некоторые респаунятся, но Морровинд - это отдельная песня. Там в каждом доме огромное количество изымаемых предметов). То же, что все-таки выпадает и при этом не нужно, обычно лежит компактной кучкой там где упало. Поскольку количество врагов обычно исчисляется не астрономическими величинами, то и число кучек не слишком велико. Впрочем, от игроков-изуверов, разделяющих тысячи золотых по одной штуке и разбрасывающих их по всей карте, так же как и связки стрел поштучно, это не страхует. Но, к счастью, таких немного.
2. Обычно, даже если это режим мультиплеера, других игроков не слишком много, а зачастую они - все равно союзники и красть оставленную ненадолго вещь такие скорее всего не будут. В одиночном режиме - и вовсе некому.
3. В хороших сингл-плеерных РПГ обычно имеется очень большое разнообразие различных вещей и зачастую с собой приходится таскать немало различного барахла (свитки, огромный арсенал зелий, несколько видов оружия, магические предметы с зарядами). При этом за один рейд по окрестностям набирается немало самых разных ценностей, из которых выкинуть что-либо рука не поднимается (горка свитков, куча новых зелий, мешок драгоценностей, целый ворох неопознанных магических предметов). Плюс всякие квестовые предметы. И иногда оказывается, что локация почти до конца зачищена, возвращаться прямо сейчас как-то не с руки, а один-два предмета как-то не вмещаются ни в свой инвентарь, ни в Bag of Holding, ни в инвентарь сопартийцев (попробуй тут как-то реализовать перетасовку вещей с окошечком "закрой меня лишь раз и навсегда"...). Здесь так и хочется дозачистить локацию, оставив с полдюжины предметов полежать на земельке, потом быстренько сбегать в магазин и вернуться обратно!

Правда, признаюсь, меня тоже несколько занесло (по крайней мере, с последним пунктом - нет еще в игре большого разнообразия предметов и я не знаю, насколько большое оно планируется) в сторону от темы. Но вот, во всяком случае, некоторые мои аргументы в защиту схемы "положил на землю, потом забрал обратно" в single-player играх.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 26.04.2010, 17:04   #118
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Магию телепорта никто не отменял, например в Dark Stone есть покупные свитки, если уж далеко забрел и есть чем поживиться, всегда можно улизнуть "полнокоробочным" в город и "опорожниться", ...вернуться опять в то же место, после чего портал закрывается, ...в Diablo тоже такое есть, кроме того, что и вещи выпадают на землю. Но, все наверное знают, в Diablo можно сбрасывать кучки золота одновременно подхватывая рядом лежащие предметы, ловким движением руки у нас две кучки золота ))) ...то же самое со всеми предметами.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 26.04.2010, 21:39   #119
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Подводя итоги, пожалуй, можно сказать, что в любом случае после смерти моба его тело должно остаться какое-то время лежать на земле (пока наш храбрый герой или партия очищают мир от околачивающихся поблизости собратьев оного), ну а после окончания всего сражения можно по очереди покликать на каждом из поверженных врагов, покидать в инвентарь то, что у них есть, а если вдруг тот достигает опасного уровня заполненности, то несколько трупов можно оставить лежать на земле, быстренько сбегать в магазин, а потом вернуться и обчистить оставшиеся трупы. При этом трупы со временем в большинстве случаев исчезнут, однако как скоро это произойдет - зависит от деталей, таких как наличие и скорость респауна монстров, а также общая их плотность (в Дьябло десять монстров - ерунда, в Морровинде шестеро - уже большая толпа!)
Ну а такие моменты, как исчезновение монстров сразу после клика (молись, чтобы внезапно не напали, пока перетряхиваешь изрядно набитый хабаром вражеский труп!) и вообще возможность выложить предметы на землю пускай автор решает в зависимости от особенностей его игрового мира, что будет логичнее и какие проблемы может вызвать в его мире тот или иной вариант. Пищу для размышления мы предоставили)
Впрочем, во многих РПГ все равно как правило монстры встречаются не так часто и дроп с них выпадает очень компактной кучкой (про Дьябло, впрочем, ни того, ни другого не скажешь - это верно!). Да и если игрок будет выкидывать что-то из инвентаря, это будут тоже не слишком многочисленные и довольно компактные кучки - чтобы разбросать предметы по большой площади ему обычно приходится очень постараться (в Baldur's Gate: зайти в инвентарь, выкинуть, выйти из инвентаря, переместить героя, повторить несколько раз; в Neverwinter Nights: зайти в инвентарь, выкинуть, подождать пока герой наклонится, положит предмет, выпрямится, повторить несколько раз).
Впрочем, эти игры имеют такую особенность, что персонажи и монстры там значительно крупнее размеров предметов, лежащих на земле, равно как и топографические расстояния. Если где-то стоит группа, скажем, из шести персонажей или монстров при довольно тесном построении, то на такой же площади, что они занимают, можно (при Очень большом желании, если не лениться) выложить около тридцати отдельных кучек предметов. В этой игре пока что одна клетка - один моб, а равно и одна кучка предметов, а кроме того, мобы постоянно респаунятся (змеи - уж очень часто, не успеешь обобрать труп одной, как она уже заново появилась!)
Вообще, если монстры по-прежнему будут респауниться (не знаю, насколько это хорошо, стоит хотя бы сделать интервал побольше), то что вещи, что трупы должны со временем исчезать. Впрочем, через какое время в точности - решать придется опытным путем.
В общем, аргументы за и против различных вариантов есть - выбирайте, что вам больше подойдет!
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 05.05.2010, 18:19   #120
Ckomoroh
Я еще только учусь
Форумчанин
 
Аватар для Ckomoroh
 
Регистрация: 24.10.2009
Сообщений: 125
Вопрос

Есть вопрос:
Есть ли в Делфи 7 компонент типо TListBox (или TCheckListBox), только чтобы туда можно было загружать картинки? Если есть то как он называется?
Ckomoroh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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