我正在尝试使用球体在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
我希望正确的球及时闪烁,但只有该行中的最后一个球闪烁。谢谢!