PureBasic

SpriteCollision()

Синтаксис

Result = SpriteCollision(#Sprite1 , x1 , y1 , #Sprite2 , x2 , y2)

Описание


Проверяет, сталкиваются ли два указанных спрайта.

Параметры

#Sprite1 Номер идентифицирующий первый Спрайт, который требуется проверить на столкновение.
x1, y1 Координаты левого верхнего угла первого спрайта, в пикселях.
#Sprite2 Номер идентифицирующий второй Спрайт, который требуется проверить на столкновение.
x2, y2 Координаты левого верхнего угла второго спрайта, в пикселях.

Возвращаемое значение

Ненулевое значение, если два спрайта перекрываются, в противном случае - 0.

Комментарии

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

Для более точной проверки столкновений используйте SpritePixelCollision().

Пример (фран.)

InitSprite()
OpenScreen(800,600,32,"Пример OpenScreen")

 ;Спрайт Стрелка
CreateSprite(0,20,20,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(0))
DrawText(0,0,"-->",RGB(255,255,0), RGB(0,0,0))
StopDrawing()

 ;Целевой спрайт
CreateSprite(1,100,100,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(1))
Circle(50,50,49,RGB(255,255,0))
Circle(50,50,40,RGB(0,255,0))
Circle(50,50,30,RGB(0,255,255))
Circle(50,50,20,RGB(0,0,255))
Circle(50,50,10,RGB(255,0,0))
StopDrawing()

 ;Спрайт цель
CreateSprite(2,100,100,#PB_Sprite_PixelCollision)
StartDrawing(SpriteOutput(2))
Circle(50,50,50,RGB(255,0,0))
DrawText(50-TextWidth("BOOM")/2,50-TextHeight("BOOM")/2,"BOOM",RGB(255,255,0),RGB(255,0,0))
StopDrawing()

 ;Начальная координата в х стрелки
x=100

 ;Цикл 
While x < 800  ; Если стрелка не попадает в цель, то программа завершится, когда x = 800
  
  ;Стрелка переместится на 2 пикселя вправо
  x=x+2
  
  ;Очистить экран полностью и отобразить черный фон
  ClearScreen(RGB(0,0,0))
  
  ;Отображение Стрелки
  DisplaySprite(0, x, 250)
  ;Отображение цели
  DisplaySprite(1, 500, 200)
  
  ;Обнаружение столкновения между стрелкой и целью
  If SpriteCollision(0, x, 250, 1, 500, 200) <> 0
    ;Если происходит столкновение, мы стираем экран и отображаем BOOM
    ClearScreen(RGB(0,0,0))
    DisplaySprite(2, 500, 200)
    ;Мы инвертируем буферы, чтобы сделать сцену видимой на экране.
    FlipBuffers()
    Delay(2000)
    ClearScreen(RGB(0,0,0))
    End ; а затем мы закрываем программу
  EndIf 
  
  
  ;Теперь, когда все рассчитывается и отображается в невидимом буфере,
  ;Мы инвертируем буферы, чтобы сделать сцену видимой на экране.
  FlipBuffers()
  
  Delay(10)
  
Wend

См. также

SpritePixelCollision()

Поддерживаемые OS

Все

<- SpriteBlendingMode() - Оглавление Sprite - SpriteDepth() ->