Нужна ваша помощь

Статус
В этой теме нельзя размещать новые ответы.

AbaKadabra

Участник
Автор темы
18
1
Версия MoonLoader
.026-beta
Как можно менять прозрачность в renderDrawTexture. Например плавное исчезновение
 
Решение
А как было бы лучше сделать плавное исчезновение текстуры?
Lua:
local start = os.clock()
local duration = 5 -- исчезнование в течении этого времени (в секундах)

while os.clock() - start < duration do
    wait(0)
    local alpha = 0xFF - 0xFF * ((os.clock() - start) / duration)
    -- подставляешь alpha в функцию и рендеришь в этом же блоке
end

Oleg Sleash

Участник
69
97
Цвет в renderDrawTexture передаётся при помощи 0xAARRGGBB, где:
AA - прозрачность
RR - Красный цвет
GG - Зелёный цвет
BB - Синий цвет
У каждого параметра мин. значение 00 (0), а максимальное FF (256 или 255, не помню точно)
то есть:
Lua:
renderDrawTexture(texture, posX, posY, sizeX, sizeY, rotation, 0xFFFF0000) -- Непрозрачный красный
renderDrawTexture(texture, posX, posY, sizeX, sizeY, rotation, 0x80FF0000) -- Полупрозрачный красный
renderDrawTexture(texture, posX, posY, sizeX, sizeY, rotation, 0x00FF0000) -- Прозрачный красный (Нахуя красный если прозрачный? Так надо)
 

хуега)

РП игрок
Модератор
2,566
2,262
Как можно менять прозрачность в renderDrawTexture. Например плавное исчезновение
меня альфа канал у цвета (ARGB), например:
Lua:
local bit = require("bit")



function changeAlpha(color, newAlpha)
    local red = bit.band(bit.rshift(color, 16), 0xFF)
    local green = bit.band(bit.rshift(color, 8), 0xFF)
    local blue = bit.band(color, 0xFF)
    return bit.bor(bit.lshift(newAlpha, 24), bit.lshift(red, 16), bit.lshift(green, 8), blue)
end



print(string.format("ARGB цвет: 0x%08X", changeAlpha(0xFFFFFFFF, 0xF))) -- output: 0x0FFFFFFF
 
Последнее редактирование:

AbaKadabra

Участник
Автор темы
18
1
меня альфа канал у цвета (ARGB), например:
Lua:
local bit = require("bit")



function changeAlpha(color, newAlpha)
    local red = bit.band(bit.rshift(color, 16), 0xFF)
    local green = bit.band(bit.rshift(color, 8), 0xFF)
    local blue = bit.band(color, 0xFF)
    return bit.bor(bit.lshift(newAlpha, 24), bit.lshift(red, 16), bit.lshift(green, 8), blue)
end



print(string.format("ARGB цвет: 0x%08X", changeAlpha(0xFFFFFFFF, 0xF))) -- output: 0x0FFFFFFF
А как было бы лучше сделать плавное исчезновение текстуры?
 

wojciech?

Известный
220
132
А как было бы лучше сделать плавное исчезновение текстуры?
Lua:
local start = os.clock()
local duration = 5 -- исчезнование в течении этого времени (в секундах)

while os.clock() - start < duration do
    wait(0)
    local alpha = 0xFF - 0xFF * ((os.clock() - start) / duration)
    -- подставляешь alpha в функцию и рендеришь в этом же блоке
end
 

AbaKadabra

Участник
Автор темы
18
1
Lua:
local start = os.clock()
local duration = 5 -- исчезнование в течении этого времени (в секундах)

while os.clock() - start < duration do
    wait(0)
    local alpha = 0xFF - 0xFF * ((os.clock() - start) / duration)
    -- подставляешь alpha в функцию и рендеришь в этом же блоке
end
as:
renderFontDrawText(font_you, text, resX  - 183, resY - 248, ('%02xffffff'):format(alpha))
Понимаю то нихуя не понимаю, прошу прощения за мою тупость но что не так ?
 

bulba$h

Активный
331
91
Lua:
local ffi = require "ffi"
local bit = require "bit"

ffi.cdef [[
  unsigned long __stdcall timeGetTime();
]]
local winmm = ffi.load("winmm.dll")

local bor, lshift = bit.bor, bit.lshift

local Animations = {}

local LINEAR = function(x) return x end
local SQUARED = function(x) return math.sqrt(x) end

local font = renderCreateFont("C:\\Windows\\Fonts\\arial.ttf", 14, 0)

function main()
  -- "text_anim" - название анимации, нужно просто что бы анимации различались между собой
  -- LINEAR - тип анимации, можно запихнуть туда любые математические операции.
  --  В нашем случае это просто линейная анимация. SQUARED же - более плавная (в начале и конце - медленнее, в середине - быстрее)
  -- 0.5 - скорость анимации, это просто число, чем больше - тем быстрее
  local text_anim = Animations:get("text_anim", LINEAR, 0.5)

  while not isSampAvailable() do wait(0) end

  sampRegisterChatCommand("anim_reverse", function()
    -- можем инвертировать анимацию
    text_anim.reverse = not text_anim.reverse
  end)

  -- если уже создали анимацию, можем не передавать функцию и скорость
  local anim = Animations:get("text_anim")

  while true do
    -- возвращает число между 0 и 1
    local progress = anim:get()

    -- какой-то наш цвет
    local color = 0xFFFFFF

    -- применяем прозрачность
    local alpha = math.floor(progress * 255)
    alpha = lshift(alpha, 24)
    color = bor(color, alpha)

    renderFontDrawText(font, "TEXT!!!", 500, 500, color)

    wait(0)
  end
end

function Animations:get(name, calc, speed)
  if not self[name] then
    self[name] = {
      calc = calc,
      speed = speed or 1,
      last_time = winmm.timeGetTime(),
      reverse = false,
      progress = 0,
      get = function(self)
        local retval = self.calc(self.reverse and 1 - self.progress or self.progress)
        local diff = (((winmm.timeGetTime() - self.last_time) / 1000) * speed)
        self.progress = math.clamp(self.progress + (self.reverse and -diff or diff), 0.0, 1.0)
        self.last_time = winmm.timeGetTime()
        return self.reverse and 1 - retval or retval
      end,
      reset = function(self)
        self.progress = self.reverse and 1 or 0
        self.last_time = winmm.timeGetTime()
      end
    }
  end
  return self[name]
end

function math.clamp(v, min, max)
  return math.max(math.min(v, max), min)
end
crew redholms
 

хуега)

РП игрок
Модератор
2,566
2,262
Lua:
local color = tonumber(("%02xffffff"):format(alpha), 16)
renderFontDrawText(font_you, text, resX  - 183, resY - 248, color)
Зачем танцы с бубном, на счет систем счисления, если луа без разницы что сувать в себя, всё переводится в десятиричную
 

wojciech?

Известный
220
132
Зачем танцы с бубном, на счет систем счисления, если луа без разницы что сувать в себя, всё переводится в десятиричную
1698065074293.png
1698065096029.png


Без префикса 0x не вернет значение, ибо посчитает это просто буквами. Надо явно указать, либо 0x, либо в tonumber, вторым параметром
 
  • Нравится
Реакции: MrDorlik

хуега)

РП игрок
Модератор
2,566
2,262
Посмотреть вложение 218834Посмотреть вложение 218835

Без префикса 0x не вернет значение, ибо посчитает это просто буквами. Надо явно указать, либо 0x, либо в tonumber, вторым параметром
А, извиняюсь, не до конца прочел сообщение, которое ты цитировал (думал речь идет про передачу альфы в мою функцию)
 
Статус
В этой теме нельзя размещать новые ответы.