Взаимодействие объектов

SFML и C++ Уроки \ Разработка игр Форумы Логика игр Взаимодействие объектов

В этой теме 15 ответов, 6 участников, последнее обновление RazorNd RazorNd 3 года/лет, 6 мес. назад.

Просмотр 15 сообщений - с 1 по 15 (из 16 всего)
  • Автор
    Сообщения
  • #661
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    Имеется много динамических объектов (мобов, противников ). Грузятся они массивом но можно и по одному. Представляют из себя класс со своими методами, научены пока что следовать за игроком если он в поле их видимости и не следовать если не в поле. Поле видимости определяться расстоянием вектора до игрока, то есть – каждый моб вычисляет расстояние до игрока и определяет равно ли оно радиусу его видимости или нет. Все хорошо работает но то того момента когда мобов больше чем один.

    Попытка сделать все универсально по ходу процесса все больше и больше терпит не удачу ( . Проблема возникает в момент следование мобов за игроком а именно – они начинают сливаться друг в друга(нет функции обработки столкновений между мобами)

    Функцию сделать не так сложно как заставить моба определять остальных мобов возле себя, как близко они к нему и что вообще происходит возле него чтобы запустить процесс отталкивание его от других.  Рисовать вектор от одного моба к другим мобам и определять сторону к которой он подходит  ? а если их 50 ? или заранее не известно их количество ? По моему субъективному мнению это не тот вариант который подходит(пробовал рисовать в ручную хотя бы 10 мобов и вектор от одного к остальным , в и тоге получил паутину да и это слишком ресурс-о емко.

    Может кто знает вариант как такое можно провернуть ?

    Даже выше описанное не предоставляет такой проблемы как заставить моба определить существование остальных как таковых вообще. Не охота передавать в метод апдейт каждый экземпляр класса (если их 10 то каждому я должен передать силку на 9 остальных чтоб он хотя бы знал об их существовании).

    Вложения:
    You must be logged in to view attached files.
    #664
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:587

    Зарегистрирован:
    04.01.2015

    Репутация:104

    Игра класс!

    а если добавить в действие каждого скелета пару раз рандома? тогда они будут более хаотично разбросаны по карте. ну или можно сделать столкновения между ними с помощью intersect

    #668
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    В принципе я сделал функцию, она работает.

    Передал в класс силку на массив, внутри класса функция которая проходит по циклу минуя индекс самого себя (чтоб не проверять столкновение с самим собой ). Но пока проблемы с отталкиванием (.

    #711
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:587

    Зарегистрирован:
    04.01.2015

    Репутация:104

    решил проблемы с отталкиванием?

    #713
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    Не. Их то телепортирует то просто не чего происходит. Пример перемещения брал у тебя из урока о создании врага. Двигаю их не setPosition(); а move, все работает отлично. Решил взять это за вектор скорости :

    x += 0.1*timee*(xT – xM) / TargetDistance;
    y += 0.1*timee*(yT – yM) / TargetDistance;

    Потом    move(x,y);

    Возникла идея по типу как тут :http://monkey-x.ru/knowledge/articles/12-fizicheskie-dvizhki-dlya-chainikov

    но пока что знаний у меня для этого не хватает.

    Чувствую что придется учить матрицы итд….(

    #716
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:587

    Зарегистрирован:
    04.01.2015

    Репутация:104

    они друг друга отталкивают просто? а если скорость у одного из них занулить в этот момент?

    #718
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    Если их останавливать то я думаю  они будут ходить рывками. Но я попробую

    #840
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

    Зарегистрирован:
    23.05.2015

    Репутация:9

    Не понимаю, зачем делать векторы между скелетами, если можно просто проверять на пересечение спрайтов. Если они столкнуться, то просто скорость сбивай, а в новом проходе цикла опять скорость выстави. В итоге они соберутся строем и будут дружно идти

    #848
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    Не все так просто

    #925
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:587

    Зарегистрирован:
    04.01.2015

    Репутация:104

    разобрался? попробуй сделай выталкивание для каждого из них.

    типа так:

     

    #3185
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:587

    Зарегистрирован:
    04.01.2015

    Репутация:104

    чтобы обойти своего можно попробовать сделать ф-цию которая принимает объект этого класса (или список таких объектов) и делать проверку что то типа наперед:

     

    1враг(стоит)         2враг (идёт влево , пока не случится “коллизия с врагом слева”, как только тру , то идёт вниз)

    ситуация наоборот:

    1враг(идёт вправо, пока с ним не случится “коллизия с врагом справа”)         2враг (стоит )

     

    ну или без этой ф-ции просто итераторы как в уроке (взаимодействие объектов списка между собой) один объект с другими сравнивать и после коллизии делать какие то действия.

    #3206

    Sinsinmin
    Участник
    Сообщений:31

    Зарегистрирован:
    08.02.2016

    Репутация:16

    Не) тут сложнее всё. В общем судя по всему придётся использовать волновой алгоритм поиска пути А* a-star.

    Пока что ещё не знаю как его делать. Но будем посмотреть))

    #3207
    Heisenberg
    Heisenberg
    Участник
    Сообщений:323

    Зарегистрирован:
    01.04.2015

    Репутация:145
    #3208

    Sinsinmin
    Участник
    Сообщений:31

    Зарегистрирован:
    08.02.2016

    Репутация:16

    )))Визуального представления полно в инете. И между прочим на картинке что ты скинул не очень хороший поиск пути.

    Вот ежели бы ты код скинул. Рабочий для SFML и С++ тогда другое дело.

    #3226

    Sinsinmin
    Участник
    Сообщений:31

    Зарегистрирован:
    08.02.2016

    Репутация:16

    Я так понимаю что с поиском пути как таковым никто не сталкивался. Потому как никто не выложил рабочий код.

    Тогда предлагаю вот что. Общими усилиями создать такой код для SFML.

    Описание: Википедия Алгоритм ЛИ

    Хотелось бы для начала осилить хотябы ортогональный поиск пути. То есть “в окрестности фон Неймана соседними ячейками считаются только 4 ячейки по вертикали и горизонтали”

    Во вложении Слева поиск пути A* а справа Волновой алгоритм.

     

     

     

     

    Вложения:
    You must be logged in to view attached files.
Просмотр 15 сообщений - с 1 по 15 (из 16 всего)

Для ответа в этой теме необходимо авторизоваться.