У меня есть наработка, идея: у нас есть список с 3 параметрами, цвет света, радиус (длинна) света и интенсивность.
Код:
Скрытый текст
local GUI = require("GUI")local screen = require("Screen")local color = require('color')--------------------------------------------------------------------------------function round(num)return math.ceil(num)endlocal workspace = GUI.workspace()--------------------------------------------------------------------------------
light ={intensivity=0.1,radius =30,color =0xFF0000}local object
localfunction idk(x,step)return(x-step)/(light.intensivity-step)-- Что-бы значение интенсивности колебалось от 0 до 1, а не было 20end
workspace.eventHandler =function(_,_,...)local args={...}if args[1]=='touch'then-- При клике создадим объект
object = workspace:addChild(GUI.object(args[3], args[4],50,10))
object.draw =function(object)local x,y = object.x, object.y
function set(x,y,intensivity)local x,y = round(x), round(y)local was ={screen.get(x,y)}-- Получаем цвета старого пикселя ..
screen.set(x,y,color.blend(was[1],light.color,intensivity),color.blend(was[2],light.color,intensivity),was[3])-- .. и миксуем его с нашимendlocal step = light.intensivity/light.radius -- шаг на 1 радиус, что-бы интенсивность света в конце +- была ровна 0for radius =0, light.radius dolocal calc = radius * step -- Как-бы мерием сколько мы прошли, что-бы понять интенсивность света на этом этапеlocal balance = calc -- Раньше сдесь было доп условие, оно не нужно. Пока-что так.local last =0-- Затычка для будущего момета с отладкойfor angle =1,180do-- Чем меньше, тем меньше "лучей" мы пустим. Полагаю большое количество не имеет смысла.if last ~= balance then-- - - - -- Отладка
print(idk(balance,step),balance,step,calc)-- Отладкаend-- - - - - -- Отладка
last = balance -- - - - - -- Отладка
set(math.cos(math.deg(angle))*radius+x,(math.sin(math.deg(-angle))*radius)/1.5+y,idk(balance,step))-- Ставим пиксели, высоту делим на 1.5 для более мене круга. Интересно как оно себя поведёт. endendend
workspace:draw()endend
workspace:draw()
workspace:start()
Пример к коду, недостаток angle в цикле. Недостаток "лучей" для круга. А еще красиво.
Радиус 10
Радиус 30
Проблема: Как бы ты не изменял интенсивность, результат тот-же. Не правильно считает центр, он заливается сплошным цветом вместо градиента.
Должно-быть: чем больше интенсивность, тем больше должно убавляться света на радиус. Я не знаю что я делаю не так что-б результат получался одинаковым любом случаи. Вся интенсивность почему-то концентрируется в центре. Жэнтэльмены, помогите узнать что я делаю не так.
У меня есть наработка, идея: у нас есть список с 3 параметрами, цвет света, радиус (длинна) света и интенсивность.
Код:
Пример к коду, недостаток angle в цикле. Недостаток "лучей" для круга. А еще красиво.
Радиус 10
Радиус 30
Проблема: Как бы ты не изменял интенсивность, результат тот-же. Не правильно считает центр, он заливается сплошным цветом вместо градиента.
Должно-быть: чем больше интенсивность, тем больше должно убавляться света на радиус. Я не знаю что я делаю не так что-б результат получался одинаковым любом случаи. Вся интенсивность почему-то концентрируется в центре. Жэнтэльмены, помогите узнать что я делаю не так.
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах