Среда, 21 Августа 2019, 22:02

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Коллизии в 2D (как реализовать)
Коллизии в 2D
TheWickerManДата: Воскресенье, 16 Декабря 2012, 01:02 | Сообщение # 1
частый гость
Сейчас нет на сайте
Делаю платформер на С++ Builder . По принципам двойной буфферизации у меня две картинки. На одной (невидимой игроку) все отрисовывается, и по таймеру отправляется на вторую (видимую), чтобы избежать мерцания. Понадобилось реализовать в игре коллизии. Все что пока пришло мне в голову это создать еще одну невидимую картинку на которой будут находится только черные контуры игровых предметов. Тогда я смогу проверять : если следующий пиксель на пути движущегося предмета - черный, значит нужно прекратить движение. Если я делаю правильно, подскажите пожалуйста, как лучше всего это реализовать. Если неправильно, подскажите пожалуйста другое решение.

Богам спешить некуда - у них впереди вечность.
aallaДата: Воскресенье, 16 Декабря 2012, 01:11 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
TheWickerMan, не изобретай велосипед), возьми готовый движок в котором присутствуют функции, методы отрисовки спрайтов.
TheWickerManДата: Воскресенье, 16 Декабря 2012, 01:13 | Сообщение # 3
частый гость
Сейчас нет на сайте
мне сейчас нужен не быстрый результат, а понимание процесса

Богам спешить некуда - у них впереди вечность.
aallaДата: Воскресенье, 16 Декабря 2012, 01:22 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
TheWickerMan, тогда штурди книжки на подобии серии книг "Game Programming Gems", могу если что подсказать где есть электронный вариант всей серии книг.(разумеется что таких шедевров на Русском просто нет.)

Сообщение отредактировал aalla - Воскресенье, 16 Декабря 2012, 01:24
GlimlachДата: Воскресенье, 16 Декабря 2012, 10:51 | Сообщение # 5
был не раз
Сейчас нет на сайте
TheWickerMan, Не совсем понял в чем проблема. Двойная буфферизация создает какие-то проблемы для обнаружение коллизии чтоли? А вообще обнаружить коллизию можно так: перебираешь все возможные пары объектов, вычисляешь для каждого объекта пары прямоугольник покрывающий весь объект и смотришь пересекаются ли они у тебя. Если да, то между объектами пары произошла коллизия. Ну и в зависимости от условий как-то реагируешь на это. Если это, например, столкнулись два персонажа, то ставишь их вплотную.

Сообщение отредактировал Glimlach - Воскресенье, 16 Декабря 2012, 10:55
FumleadДата: Воскресенье, 16 Декабря 2012, 12:27 | Сообщение # 6
участник
Сейчас нет на сайте
Я конечно никогда так не пробывал, но по моему, двойная буферизация никак не вляеет на определение коллизий.
Ну а если вляет - просто математически просчитывать столкнулись объекты или нет.


Параноик с гениальным планом по захвату мира.
kikas86Дата: Воскресенье, 16 Декабря 2012, 12:37 | Сообщение # 7
постоянный участник
Сейчас нет на сайте
Проверка столкновения объектов по прямоугольникам.
Code
bool Collis(float pos_x2, float pos_y2, float size_x2, float size_y2, float pos_x, float pos_y, float size_x, float size_y)
{
     return (((pos_x2 + size_x2 >= pos_x)     
            && (pos_x2 <= pos_x + size_x))     
            && ((pos_y2 + size_y2 >= pos_y)
            && (pos_y2 <= pos_y + size_y)));
}

pos_x2, float pos_y2 - позиция второго объекта.
pos_x, float pos_y - позиция первого объекта.
size_x2,float size_x2 - размер второго объекта, например 32 на 32 пикселя.
size_x,float size_x2 - размер первого объекта.
Пример:
Code
if(Collis(x1, y1, 32, 32, x2, y2, 32, 32))// если коллизия есть то выполнять действие.
{
/*действия...*/
}

где 32, 32 это размеры объектов.
x1,x2,y1,y2 - их позиция.


Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.

Сообщение отредактировал kikas86 - Воскресенье, 16 Декабря 2012, 12:39
ReanДата: Понедельник, 17 Декабря 2012, 11:02 | Сообщение # 8
участник
Сейчас нет на сайте
Quote (Fumlead)
Я конечно никогда так не пробывал, но по моему, двойная буферизация никак не вляеет на определение коллизий.

Совершенно верно.
Компьютер не понимает картинок, ему без разницы, что вы собираетесь отрисовать. Все коллизии просчитываются исключительно математически на основе данных об объекте (координаты положения, ширина, высота, глубина).
Если же необходима попиксильная коллизия, то, в любом случае, без обычной коллизии не обойтись (дабы не загружать процессор).
Это я к слову о "понимании процесса".
Форум игроделов » Программирование » C/C++ » Коллизии в 2D (как реализовать)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2019 Рейтинг