- 30
- 2
- Версия MoonLoader
- .026-beta
Как можно менять прозрачность в renderDrawTexture. Например плавное исчезновение
А как было бы лучше сделать плавное исчезновение текстуры?
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
renderDrawTexture(texture, posX, posY, sizeX, sizeY, rotation, 0xFFFF0000) -- Непрозрачный красный
renderDrawTexture(texture, posX, posY, sizeX, sizeY, rotation, 0x80FF0000) -- Полупрозрачный красный
renderDrawTexture(texture, posX, posY, sizeX, sizeY, rotation, 0x00FF0000) -- Прозрачный красный (Нахуя красный если прозрачный? Так надо)
меня альфа канал у цвета (ARGB), например:Как можно менять прозрачность в renderDrawTexture. Например плавное исчезновение
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
А как было бы лучше сделать плавное исчезновение текстуры?меня альфа канал у цвета (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
А как было бы лучше сделать плавное исчезновение текстуры?
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
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
renderFontDrawText(font_you, text, resX - 183, resY - 248, ('%02xffffff'):format(alpha))
ты строку вместо числа используешьПонимаю то нихуя не понимаю, прошу прощения за мою тупость но что не так ?as:renderFontDrawText(font_you, text, resX - 183, resY - 248, ('%02xffffff'):format(alpha))
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
Извиняюсь за наглость, но можно как то строкой как правильноты строку вместо числа используешь
Извиняюсь за наглость, но можно как то строкой как правильно
local color = tonumber(("%02xffffff"):format(alpha), 16)
renderFontDrawText(font_you, text, resX - 183, resY - 248, color)
Зачем танцы с бубном, на счет систем счисления, если луа без разницы что сувать в себя, всё переводится в десятиричнуюLua:local color = tonumber(("%02xffffff"):format(alpha), 16) renderFontDrawText(font_you, text, resX - 183, resY - 248, color)
Зачем танцы с бубном, на счет систем счисления, если луа без разницы что сувать в себя, всё переводится в десятиричную
А, извиняюсь, не до конца прочел сообщение, которое ты цитировал (думал речь идет про передачу альфы в мою функцию)Посмотреть вложение 218834Посмотреть вложение 218835
Без префикса 0x не вернет значение, ибо посчитает это просто буквами. Надо явно указать, либо 0x, либо в tonumber, вторым параметром