Только последняя сфера делает вещи. Как мне исправить мой метроном? - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь создать визуальный метроном в vpython, используя сферы. У меня есть пользовательский ввод, который спрашивает, какую временную подпись они хотят (на данный момент мне нужны только вариации 4/4, такие как 3/4, 7/4 и т. Д.), И программа сгенерирует это количество сфер, поэтому для 4 / 4 раза будут сгенерированы 4 сферы для обозначения каждой части ритма. другой пользовательский ввод выскакивает после запроса, какой темп они хотят. Затем я хочу, чтобы программа генерировала соответствующее количество сфер и заставляла их появляться и исчезать одна за другой во времени. Для того, чтобы программа могла различить, какой ритм включен, я установил функцию (я назвал ее k), чтобы взять текущее время и определить, какой ритм мы используем при использовании модульного (например, 5% 4 будет означать, что t = 5 будет равный первому удару в 4/4 времени).

Сейчас генерируется соответствующее количество сфер, но на самом деле мигает только одна (самая правая сфера) сфера. Как мне заставить все мои сферы появляться, когда на правильном ритме?

Используя мою модульную функцию k, я попытался использовать оператор if / else, чтобы сказать, когда k равно одному из значений сфер, добавленных в список, тогда эта сфера исчезнет. если k нет, тогда эта сфера есть.

print (n,'/4')
num_ball = int(n)
temp = input("What tempo do you want?" )
print (temp,'bpm')
tempo = int(temp)
balls = []
spheres = []
more_balls = np.arange (0, num_ball * 2, 2)

for x in more_balls:
    sphere_off = vp.sphere (radius = 0.5,
                            pos = vp.vector (x, 0, 0),
                            texture = 'https://i.imgur.com/WMxgtkS.jpg')
    balls.append(sphere_off)

for j in more_balls:
    sphere_on = vp.sphere (radius = 1,
                           pos = vp.vector (j, 0, 0),
                           color = vp.vector(0, 0, 0),
                           visible = True)
    spheres.append(sphere_on)



while True: 
    vp.rate(bps)
    t = t + dt
    k = t%num_ball

    if k in more_balls:
        sphere_on.visible = False

    else: 
        sphere_on.visible = True

Я ожидаю, что правильный шар начнет мигать вовремя, но мигает только последний шар в линии. Спасибо!

...