PureBasic

SpriteBlendingMode()

Синтаксис

SpriteBlendingMode(SourceMode , DestinationMode)

Описание


Изменяет способ смешивания цветов спрайта с фоном (при использовании функции DisplayTransparentSprite()). Эта функция предназначена для опытных пользователей. Результат может отличаться в зависимости от базовой подсистемы: например, OpenGL и DirectX ведут себя по разному.

Параметры

SourceMode, DestinationMode И режим источника, и режим назначения могут принимать одно из следующих значений:
  #PB_Sprite_BlendZero
  #PB_Sprite_BlendOne
  #PB_Sprite_BlendSourceColor
  #PB_Sprite_BlendInvertSourceColor
  #PB_Sprite_BlendDestinationColor
  #PB_Sprite_BlendInvertDestinationColor
  #PB_Sprite_BlendSourceAlpha
  #PB_Sprite_BlendInvertSourceAlpha
  #PB_Sprite_BlendDestinationAlpha
  #PB_Sprite_BlendInvertDestinationAlpha
Значение по умолчанию: SpriteBlendingMode (#PB_Sprite_BlendSourceAlpha, #PB_Sprite_BlendInvertSourceAlpha)

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

Ничего.

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

; Структура, содержащая название и режим прозрачности
Structure ModeTransparence
    Nom$
    Numero.l
EndStructure

; Список, который содержит все "ModeSource"
NewList ModeSource.ModeTransparence()
AddElement(ModeSource())
ModeSource()\Nom$ = "#PB_Sprite_BlendZero"
ModeSource()\Numero =#PB_Sprite_BlendZero
AddElement(ModeSource())
ModeSource()\Nom$ = "#PB_Sprite_BlendOne"
ModeSource()\Numero =#PB_Sprite_BlendOne
AddElement(ModeSource())
ModeSource()\Nom$ = "#PB_Sprite_BlendSourceColor"
ModeSource()\Numero =#PB_Sprite_BlendSourceColor
AddElement(ModeSource())
ModeSource()\Nom$ = "#PB_Sprite_BlendInvertSourceColor"
ModeSource()\Numero =#PB_Sprite_BlendInvertSourceColor
AddElement(ModeSource())
ModeSource()\Nom$ = "#PB_Sprite_BlendDestinationColor"
ModeSource()\Numero =#PB_Sprite_BlendDestinationColor
AddElement(ModeSource())
ModeSource()\Nom$ = "#PB_Sprite_BlendInvertDestinationColor"
ModeSource()\Numero =#PB_Sprite_BlendInvertDestinationColor
AddElement(ModeSource())
ModeSource()\Nom$ = "#PB_Sprite_BlendSourceAlpha"
ModeSource()\Numero =#PB_Sprite_BlendSourceAlpha
AddElement(ModeSource())
ModeSource()\Nom$ = "#PB_Sprite_BlendInvertSourceAlpha"
ModeSource()\Numero =#PB_Sprite_BlendInvertSourceAlpha
AddElement(ModeSource())
ModeSource()\Nom$ = "#PB_Sprite_BlendDestinationAlpha"
ModeSource()\Numero =#PB_Sprite_BlendDestinationAlpha
AddElement(ModeSource())
ModeSource()\Nom$ = "PB_Sprite_BlendInvertDestinationAlpha"
ModeSource()\Numero =#PB_Sprite_BlendInvertDestinationAlpha

; Список, который содержит все "ModeDestination"
NewList ModeDestination.ModeTransparence()
CopyList(ModeSource(), ModeDestination())

; Инициализация спрайтов и клавиатуры
InitSprite()
InitKeyboard()

; Создание фонового изображения, которое позволит увидеть прозрачность спрайтов
CreateImage(1, 800, 600, 32)
StartDrawing(ImageOutput(1))
Box(0, 0, 800, 600, RGBA(255, 255, 255, 255))
For i=1 To 1000
    Ellipse(Random(800, 1), Random(600, 1), Random(8, 1), Random(8, 1) , RGB(Random(255), Random(255), Random(255)))
Next i
StopDrawing()

; Открытие экрана
OpenScreen(800, 600, 32, "Sprite")

; Целевой спрайт.
CreateSprite(0, 100, 100, #PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(0))
Circle(50, 50, 49, RGBA(255, 255, 0, 255))
Circle(50, 50, 40, RGBA(0, 255, 0, 128))
Circle(50, 50, 30, RGBA(0, 255, 255, 128))
Circle(50, 50, 20, RGBA(0, 0, 255, 128))
Circle(50, 50, 10, RGBA(255, 0, 0, 64))
StopDrawing()

;Для всех комбинаций между ModeSource и ModeDestination
ForEach ModeSource()
    ForEach ModeDestination()

        ;Программа заканчивается, если кнопка ESC нажата в течение длительного времени
        ExamineKeyboard()
        If KeyboardPushed(#PB_Key_Escape)
            End
        EndIf

        ;Отображение фона и некоторой информации
        StartDrawing(ScreenOutput())
        DrawImage(ImageID(1), 1, 1)
        DrawText(0, 0, "Нажмите Esc на 5 секунд, чтобы выйти")
        DrawText(50, 100, ModeSource()\Nom$+" / "+ModeDestination()\Nom$, RGB(255, 255, 255), RGB(255, 0, 0))
        DrawText(50, 270, "Прозрачный цвет = черный", RGB(255, 255, 0))
        DrawText(50, 470, "Прозрачный цвет = красный", RGB(255, 255, 0))
        StopDrawing()

        ;ПРОЗРАЧНОСТЬ спрайта: черный цвет по умолчанию
        SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
        DisplaySprite(0, 50, 160)

        SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
        TransparentSpriteColor(0, RGBA(0, 0, 0, 128))

        SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
        DisplayTransparentSprite(0, 200, 160, 180)

        SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
        DisplayTransparentSprite(0, 350, 160, 128, RGBA(255, 0, 0, 180))

        SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
        DisplayTransparentSprite(0, 500, 160, 0, RGBA(255, 0, 0, 180))

        SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
        DisplayTransparentSprite(0, 500, 160, 255, RGBA(255, 0, 0, 180))

        SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
        DisplaySprite(0, 50, 360)
        SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)

        ;ПРОЗРАЧНОСТЬ спрайта: красный цвет
        TransparentSpriteColor(0, RGBA(255, 0, 0, 180))

        SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
        DisplayTransparentSprite(0, 200, 360, 180)

        SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
        DisplayTransparentSprite(0, 350, 360, 180)

        SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
        DisplayTransparentSprite(0, 500, 360, 0)

        SpriteBlendingMode(ModeSource()\Numero, ModeDestination()\Numero)
        DisplayTransparentSprite(0, 500, 360, 255)

        ;Экранный дисплей
        FlipBuffers()

        ;Очистить буфер
        ClearScreen(RGBA(255, 255, 255, 255))

        ;Задержка 3 секунды
        Delay(3000)

    Next
Next

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

Все

<- SaveSprite() - Оглавление Sprite - SpriteCollision() ->