Collision Detection.

В этой теме 16 ответов, 2 участника, последнее обновление Dallon Avery Dallon Avery 3 года/лет, 4 мес. назад.

Просмотр 15 сообщений - с 1 по 15 (из 17 всего)
  • Автор
    Сообщения
  • #1207
    Dallon Avery
    Dallon Avery
    Участник
    Сообщений:21

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

    Репутация:5

    Собственно, продолжая знакомиться с sfml2.1 я делаю игру Breakout, которая должна выглядеть минимум так как показано на картинке. Моя же главная задача, это правильно воспроизвести столкновение шарика-мяча (окружность) с кирпичикми (прямоугольниками), без учёта гравитации. А вот как это сделать я не имею понятия, знаю только то, что простым sf::CircleShape shape(50); тут не отделаешься.

    Я немало порылся в интернете и нашёл то, что может мне помочь – Circle-AABB intersection test, где AABB – это  это параллелепипед со сторонами, параллельными осям координат, ограничивающий некоторый геометрический объект в пространстве, по определению на Википедии. Так что от этого и надо плясать.

    Можете ли вы объяснить на примере принцип работы такого подхода или предложить свой вариант?

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

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

    Репутация:104

    а как трехмерный паралеллепипед вписывается в 2д игру? тогда эти две стороны , которые тебе нужны, превращаются в квадрат..

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

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

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

    Репутация:104

    это самое простое решение, которое пришло в голову сразу же, другое пока не думал. может тебя это устроит:)

    #1211
    Dallon Avery
    Dallon Avery
    Участник
    Сообщений:21

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

    Репутация:5

    Твой вариант мне очень нравится, из-за своей хитрожопости, но я хочу использовать как можно более точную реализацию физики столкновений. Без спрайтов =)

    #1213
    Dallon Avery
    Dallon Avery
    Участник
    Сообщений:21

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

    Репутация:5

    Вот примерно так будет выглядеть моя версия. Осталось всё это заставить двигаться.

    Вложения:
    You must be logged in to view attached files.
    #1215
    Dallon Avery
    Dallon Avery
    Участник
    Сообщений:21

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

    Репутация:5

    А вот и код, который я имею, взгляните, может подскажите чего:

     

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

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

    Репутация:104

    вот тут разбиралась эта игра, только на паскале. но принцип тот же и объяснение тоже.

    #1221
    Dallon Avery
    Dallon Avery
    Участник
    Сообщений:21

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

    Репутация:5

    Принцип-то у него совсем другой. Ну да ладно, я уже заставил мячик летать по экрану и отталкиваться от краёв окна.

    Осталось теперь сделать отталкивание от прямоугольников.

    #1227
    +1
    Dallon Avery
    Dallon Avery
    Участник
    Сообщений:21

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

    Репутация:5

    Вот здесь наглядно показаны примеры пересечения фигур: Collision Detection in Games

    #1270
    Dallon Avery
    Dallon Avery
    Участник
    Сообщений:21

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

    Репутация:5

    Вопрос: можно ли двигать фигуру(клавиатурой в функции update), нарисованную с помощью VertexArray?

    И если эта фигура прямоугольник, можно ли напиать функцию для пересечения окружности и одной из граней прямоугольника?

    #1273
    Dallon Avery
    Dallon Avery
    Участник
    Сообщений:21

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

    Репутация:5

    Что я имею ввиду под этим? Вот что:

    Таков мой прямоугольник, нарисованный с помощью VertexArray:

    Вопрос, можно ли доказать пересечение CircleShape ball(10); где радиус 10, с линией соединяющую rectangle[0] и rectangle[1]???

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

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

    Репутация:104

    Попробуй пошамань с getRect

    #1282
    Dallon Avery
    Dallon Avery
    Участник
    Сообщений:21

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

    Репутация:5

    Вот зацените:

     

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

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

    Репутация:104

    всё работает теперь? теперь можно подумать над сокращением кода или вынесением его из тела главной ф-ции:)

    #1298
    Dallon Avery
    Dallon Avery
    Участник
    Сообщений:21

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

    Репутация:5

    Да, всё работает. Хочу теперь раскидать всё по хедерам, что посоветуешь?

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

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