Меню сайта


Статистика



Главная » Статьи » Уроки » Разное

Коллизия изображений
Добрый день, сегодня я расскажу Вам о о такой незаменимой вещи, как коллизия изображений в Blitz3D.
Сама по себе коллизия - это столкновение, в данном случае будут сталкиваться 2 графических объекта.

Лично я часто спользую коллизию изображений ( далее КИ ) для реализации меню и выбора чего либо.

В отичии от коллизии моделей, коллизия картинок гораздо менее "прожорлива" по отношению к ресурсам.
Для начала нужно создать режим графики :

Graphics 800,600,32,0

Это означает, то я создал графическое окно с разрешением 800 на 600 пикселов, глубиной цвета 32 бита
и что программа запустится в окне.
Далее нужно установить задний буфер, всё что мы будем делать будет помещаться в него, до момента смены буфера.

SetBuffer BackBuffer()

Теперь можно приступать к самим картинкам. Давайте загрузим каждую из них в память.

Image1 - LoadImage ( " image1.bmp" )
Image2 - LoadImage ( " Image2.bmp" )

Изображения должны быть заранее помещены в папку с файлом программы .bb
В противном случае появится окно с ошибкой : " Memory Acces Violation ".

Далее нужно создать цикл, который будет выполняться до нажатия клавиши Ecs.

While Not KeyDown (1)
....
wend

Далее нужно очистить экран от предыдущего кадра и вывести картинки на экран.

While Not KeyDown (1)
Cls

DrawImage image1,300,400
DrawImage image2,MouseX(),MouseY()

wend

Теперь наши картинки загружены, одна примерно в центре эерана, а вторая является курсором мышки.
Теперь нужно добавить команду Flip в конце цикла, без неё не будут менься буферы

While Not KeyDown (1)
Cls

DrawImage image1,300,400
DrawImage image2,MouseX(),MouseY()

Flip
wend

Теперь, если все сделано правильно, на экране должны повиться 2 картинки. Но они проходят друг через друга.
Точнее, накладываются.

Давайте сделаем коллизию для картинок, чтоб при столковении программа заканчивалась.
Есть 2 варианта создания коллизию, и оба они похожи.

1.ImagesCollide (картинка 1,х1,y1,кадр1,картинка2,x2,y2,кадр2)
Эта функция хороша тем, что можно сделать коллизию на определённый кадр анимированного изображения.
Минус её в том, что она более ресурсоёмкая, чем второй вариант.
При коллизии проверяется каждый пиксел, даже прозрачные. Поэтому точность проверки очень высока.

2.ImagesOverlap (картинка,x1,y1,картинка2,x2,y2)
Эта команда менее требовательна к ресурсам, но не очень точная. С другой стороны, очень часто это и нужно.
В ней нельзя сделать проверку на кадр. Так что для каждого случая своя команда.

Выглядит это всё примерно так :

If ImagesCollide ( Image1,300,400,0,image2,MouseX(),MouseY(),0)
End
endif

Аналогично и с ImageOverlap, только параметр кадра упускается.

Получается вот что :

Graphics 800,600,32,0
SetBuffer BackBuffer()

Image1 - LoadImage ( " image1.bmp" )
Image2 - LoadImage ( " Image2.bmp" )

While Not KeyDown (1)
Cls

DrawImage image1,300,400
DrawImage image2,MouseX(),MouseY()

If ImagesCollide ( Image1,300,400,0,image2,MouseX(),MouseY(),0)
End
endif

Flip
wend

Вот таким несложным оказалась коллизия картинок. Всем удачного кода, пока.

Категория: Разное | Добавил: DarkMedveD (19.11.2009) | Автор: Михаил E W
Просмотров: 998 | Рейтинг: 5.0/2
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Скачать