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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2010, 10:04   #481
BASSON_XVI
Горю
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 10
По умолчанию

Здравствуйте 49 страниц не осилил!
У меня карта собирается из текстур 32х32 герой 64х32 ну и деревья и прочие здания разных размеров. Мне интересно как правильно отрисовывать героя и за деревьями и перед... Я не могу передвинуть героя на основания дерева (ствол) но под крону что находиться в ячейки выше могу и тут нужно что бы герой был под кроной дерева и на оборот если герой стоит на 1 ячейку ниже основания дерева(ствола) то мне нужно рисовать героя не переднем плане а дерево на заднем. Вопрос в следующем как это правильно делать? Я кончено могу рисовать героя в цикле отрисовки карты и смотреть в какой он ячейки и что вокруг него если он выше дерева то его первым рисовать дерево вторым и на оборот. На сколько это правильно?
BASSON_XVI вне форума Ответить с цитированием
Старый 14.07.2010, 11:04   #482
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Вот, столкнулся с проблемой ИИ в игре РПГ. Подскажите (может у кого и пример кода есть), как сделать врагов более умными, то есть чтобы не видели ГГ сквозь стены, кидались на ГГ, если у них полно здоровья и убегали, если мало и т.п.
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 14.07.2010, 12:55   #483
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Я кончено могу рисовать героя в цикле отрисовки карты и смотреть в какой он ячейки и что вокруг него если он выше дерева то его первым рисовать дерево вторым и на оборот. На сколько это правильно?
Делай так. Ну еще у DX/GL для этого можно использовать z-buffer.
Цитата:
как сделать врагов более умными, то есть чтобы не видели ГГ сквозь стены, кидались на ГГ, если у них полно здоровья и убегали, если мало и т.п.
Делай систему AI. Чтобы не видели сквозь стены - есть алгоритмы. Поведение можно например сделать так: у каждого врага есть типы поведения. Например если здоровье>30 то тип поведения атака, а если меньше то бегство. Можно также смотреть сколько здоровья у игрока. Например если 200 а у противника 50 и он слабее то тоже бежать и.т.п. Таких факторов влияющих на поведение AI может быть много, чем больше тем лучше.

__________________
Вадим Буренков вне форума Ответить с цитированием
Старый 14.07.2010, 16:13   #484
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

BASSON_XVI, если правильно организовано построение скелета карты и распределение в нем объектов, то все работает автоматически.
Дерево растет с корня, поэтому картинка смещается вверх на высоту текстуры минус пол клетки карты. Аналогично смещается персонаж. Как только персонаж находится по-Y выше дерева, хоть на 1 клетку, он будет позади него, ...почему? ...цикл обработает сначала персонажа, у него Y меньше, а следом дерево.
Строения смещаются в зависимости от основания. Если они занимают 1 клетку, то как в случае с деревом, если 3х3 клетки, то в центре будет смещение, все клетки основания здания должны быть непроходимыми, тогда персонаж пройдет вокруг и его появление снаружи и за зданиями будет по всем правилам. Крупные здания нужно разбивать на части, работать как с пристройками.

apromix, в каждом такте обработки моба запускается процедура. В ней куча условий. Самое первое - цикл обзора, т.е. моб сканирует вокруг себя карту на определенный радиус. Условие: если на карте обнаружился объект, проверить количество жизни. Если количество жизни больше чем у моба, то с вероятностью 80% выбрать произвольно точку отступления. Если жизни меньше или равно, то с вероятностью 90% взять координаты цели, отправить в процедуру перемещения, ...моб будет топать до цели. Он все время, каждый такт, будет выполнять все описанное ранее, и будет реагировать на перемещение цели, ...всегда будет идти к ней, как бы она не убегала. Цель может потеряться, если она уйдет каким-то образом за радиус обзора, тогда моб остановится и удалит у себя цель. Последняя проверка на дистанцию атаки. Если дистанция для нападения достаточная, то остановиться и перейти в режим атаки. Если по какой-то случайности или закономерности жизней у моба станет меньше чем у цели, он свалит. Или можно создать очередное условие на проверку режима. Если моб в режиме атаки, то не выполнять некоторые пункты выше, например, проверку на количество жизней, чтобы моб бился до конца. Тут же могут быть условия как пользоваться восстановлением жизни, лечиться или нет, когда и что делать, какими средствами.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 19.07.2010, 20:13   #485
BASSON_XVI
Горю
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 10
Смущение Не рандомистый рандом!

Довольна странная функция random(); она постоянно выбирает одни и те же цифры, то есть от запуска к запуску пробной демки моб ходит одинаково и постоянно уходит куда то вниз выделенного ему квадрата для ходьбы!
Выбор направления 0-3 то есть random(3); И насколько я вижу чаще всего выпадает именно 0. Как с этим бороться? Ниже кусок кода ходьбы мобов:
Код:
      if Mobs[i].CH <= 0 then
      begin
        Mobs[i].CH := random(random(10));
        if random(10) < 6 then Mobs[i].STOP := random(255);
        Mobs[i].N := random(3);
      end;
      if Mobs[i].STOP <= 0  then begin
      case Mobs[i].N of
      0 : Mobs[i].Y:=Mobs[i].Y+SpeedG;
      1 : Mobs[i].X:=Mobs[i].X-SpeedG;
      2 : Mobs[i].X:=Mobs[i].X+SpeedG;
      3 : Mobs[i].Y:=Mobs[i].Y-SpeedG;
      end; 
      .......
Ниже в этом же цикле отнимается шаг и рассчитывается в какую ячейку перешел моб...
BASSON_XVI вне форума Ответить с цитированием
Старый 19.07.2010, 20:40   #486
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Не помню точно, как в паскале, но по идее нужно сначала вызывать функцию randomize, чтобы ряды случайных значений каждый раз были разными.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 19.07.2010, 21:03   #487
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Не помню точно, как в паскале, но по идее нужно сначала вызывать функцию randomize, чтобы ряды случайных значений каждый раз были разными.
Все верно. Перед кодом выбора и обработки нужна команда взятия нового ряда Randomize.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 19.07.2010, 21:27   #488
Ponkole
Форумчанин
 
Регистрация: 02.07.2010
Сообщений: 167
По умолчанию

люди кто-нибудь можете пожалуйста создать текстовый файл, содержащий страницы данной темы а | то у меня инет тормознутый (оооооооооочень) за 3 день только 10 страниц прочитал (сидел где - то по часу в день)
Если я тебе помог, помоги и ты мне +ом с комментарием

Последний раз редактировалось Beermonza; 20.07.2010 в 16:15.
Ponkole вне форума Ответить с цитированием
Старый 19.07.2010, 21:36   #489
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Счастье

Сделано, залито... Если совсем фигово с нетом, то правой кнопкой мыши и "Сохранить объект как"...
I am the First of Cyber Evolution...
I am the First to Program your Future...

Последний раз редактировалось DomiNick; 19.07.2010 в 23:35. Причина: Done!
DomiNick вне форума Ответить с цитированием
Старый 19.07.2010, 21:46   #490
BASSON_XVI
Горю
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 10
По умолчанию

То есть перед каждым random(); вызывать randomize; ???
BASSON_XVI вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хорошие уроки Render Общие вопросы Delphi 9 15.09.2012 07:13
Акцесс вопросы новичков Yaga Помощь студентам 4 02.06.2008 00:16
Учебники для новичков в програмировании Рар Общие вопросы Delphi 6 08.01.2007 08:07