Я пытаюсь установить угол поворота для некоторых предметов, чтобы он соответствовал скорости счетчика ударов в минуту. У меня есть элементы, вращающиеся, но я не могу получить значение поворота, соответствующее значению градусов на кадр, которое я определил из BPM.
Код показан ниже. Я прочитал о триге, у меня есть расположение точек по кругу вниз. Они распространяются в соответствии с номером в таблице. И я могу заставить их вращаться. Но они вращаются безумно быстро.
В моей голове все должно быть просто: у меня есть 16 нот в последовательности, скажем, 60 ударов в минуту, что дает мне 22,5 градуса между точками, и они должны вращаться со скоростью 1,5 градуса на кадр, со скоростью 15 кадров в секунду, чтобы вращаться во времени с часами BPM. Это то, что я настроил, но ... они вращаются намного быстрее. Я вручную ввел различные значения, но они не совпадают.
local SCREEN_FRAMERATE = 15
local angleRot -- the gap between the dots, based upon the number of dots / 360
local rotateSpeed -- the speed in degrees per second we need to rotate so the dots align with the sounds
local bbppmm -- the beats per minute of the track
function init()
-- OTHER CODE HERE
-- set initial animation properties
angleRot = (360 / initSequence.length) -- set the offset between dots
rotateSpeed = (angleRot/SCREEN_FRAMERATE) -- work out the degrees per frame we need to rotate
-- we use a metro to trigger n times per second (SCREEN_FRAMERATE)
screen_refresh_metro = metro.init()
screen_refresh_metro.event = function()
angleRot = angleRot+1
redraw()
end
screen_refresh_metro:start(1/SCREEN_FRAMERATE)
end
-- drawing the graphical interface
function redraw()
screen.clear()
screen.level(4)
screen.rect(0,0,128,64)
screen.fill()
screen.level(1)
screen.circle(64,32,11)
screen.stroke()
for i=1,initSequence.length do
if initSequence.data[i] > 0 then
screen.circle(
math.cos((angleRot + rotateSpeed)*i)*11 + 64, -- angle * radius + offset from zero
math.sin((angleRot + rotateSpeed)*i)*11 + 32, -- this line and the above place the circles on the larger circle
initSequence.data[i] + (freqs[i]/600) -- this line make the sequence circles the sizes they are
)
screen.fill()
end
end
screen.update()
end
Я ожидаю, что точки будут вращаться со скоростью BPM, поэтому при скорости 60 ударов в минуту 22,5 градуса в секунду.
Я получаю гораздо более высокую скорость вращения, хотя она идет так быстро, что журнал не может идти в ногу, и он может быть просто случайным.