Нужны идеи: как определить плоскость препятствия?

SFML и C++ Уроки \ Разработка игр Форумы SFML Graphics Нужны идеи: как определить плоскость препятствия?

В этой теме 9 ответов, 3 участника, последнее обновление Павел Букреев Павел Букреев 8 года/лет, 11 мес. назад.

Просмотр 10 сообщений - с 1 по 10 (из 10 всего)
  • Автор
    Сообщения
  • #638

    Nikit_K
    Участник
    Сообщений:8

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

    Репутация:0

    Здравствуйте!

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

    Дальше я меняю вектор движения по Х или по У. В зависимости от плоскости.

    Заранее Спасибо!

     

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

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

    Репутация:106

    Не совсем понял вопроса. Имеешь ввиду столкновения с нижней частью карты(пол) и с боковыми стенами? Посмотри урок про взаимодействие персонажа с картой на этом сайте. он по моему №14. И по тому же принципу попробуй сделать

    #640

    Nikit_K
    Участник
    Сообщений:8

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

    Репутация:0

    Пол, стены, потолок заданы “картой”, в которой границы вертикальные заданы буквами “А”, горизонтали – буквами “Б”. На этом основании шарик “знает” какой вектор менять на противоположный для формирования “отскока”.

    Препятствия (кирпичи) сформированы как классы, представляют из себя начальную координату по X, Y к которой добавлены высота и ширина. Для формирования “отскока” необходимо шарику “понимать” с какой стороны он коснулся препятствия (снизу, сверху, слева-справа). А если говорить еще точнее, то нужно понимать это горизонтальная плоскость препятствия, или вертикальная?

     

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

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

    Репутация:22

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

    Попробуй может поможет.

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

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

    Репутация:22

    Я такой схемой пользуюсь

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

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

    Репутация:106

    Посмотри в последнем уроке функцию checkCollisionWithMap. там по Dx<0 это столкновение с левой стеной (вертикально), Dx>0 (с правой стеной, вертикально), Dy>0 – столкновение с полом. Вот при выполнении этих условий и пили то , что тебе нужно.

    #653

    Nikit_K
    Участник
    Сообщений:8

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

    Репутация:0

    Столкновение с картой мне определять не нужно( работает по принципу checkCollisionWithMap). Определить нужно другое – с какой стороны шарик подлетел к кирпичику(который на карте желтый). Когда шарик подлетает сверху или снизу, я меняю значение движения y на обратное ему(Умножаю на -1). Но когда шарик влетает в боковую сторону кирпича, он проходит сквозь него и вылетает с другой стороны – это связано с тем что не меняю движение по х. Кирпич у меня воспринимается как единая коллижн модель, поэтому в любой точке пересечения меняется только у. Что бы менять х или у нужно придумать, как шарик поймет с какой стороны к кирпичу он подлетел.

    И еще вопрос – можно ли при касании шариком кирпича, “Уничтожить кирпич”( закрасить в цвет фона, обнулить высоту и ширину коллижн модели)?

    Вложения:
    You must be logged in to view attached files.
    #656

    Nikit_K
    Участник
    Сообщений:8

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

    Репутация:0

    А можно фрагмент кода, пожалуйста? В голове не укладывается, как это реализовать?

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

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

    Репутация:106

    Фрагментом кода и будет функция checkCollisionMap из урока.

     

     

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

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

    Репутация:106

    При столкновении (одно из четырех условий выше) просто заменяется символ “0” на другой, который тебе надо, например на пробел TileMap[i][j] = ‘ ‘;

    посмотри вроде 13 или 14 урок, мы там собирали бонусы и они исчезали.

Просмотр 10 сообщений - с 1 по 10 (из 10 всего)

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