【发布时间】:2019-12-25 13:49:36
【问题描述】:
为了一个学校项目,我和我的一个朋友目前正在尝试对我们的太阳系进行模拟。我们使用的平台是 Glowscript,我们正在使用 VPython。我们已经对整个太阳系进行了编程,包括它的所有行星、太阳以及它们之间的力量。
现在我们正在尝试添加一些额外功能,其中之一是用户可以在其中选择行星的菜单。在我们的代码中,选定的对象(代码中定义的行星或太阳)将被标记为“当前对象”。之后,用户可以使用滑块更改当前对象的质量。
在编程过程中出现了两个问题。第一个是我们无法将一个对象定义为当前对象,以便以后可以更改其质量。遗憾的是,我们在代码中找不到问题。
第二个问题是我们无法在 Glowscript 中为我们的模拟添加一个以上的额外内容。我们已经编写了一个滑块功能来更改模拟“速率”(速度),之后菜单和用于更改质量的滑块根本没有出现。
def M(m):
global col, currentobject
currentobject.visible = True
obj = m.selected
if obj == 'Sun':
currentobject = sun
elif obj == "Mercury":
currentobject = mercury
elif obj == "Venus":
currentobject = venus
elif obj == "Earth":
currentobject = earth
elif obj == "Mars":
currentobject = mars
elif obj == "Jupiter":
currentobject = jupiter
elif obj == "Saturn":
currentobject = saturn
elif obj == "Uranus":
currentobject = uranus
elif obj == "Neptune":
currentobject = neptune
currentobject=m.selected
print(m.selected,m.index)
menu(choices=['Choose an object', 'Sun', 'Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune'], bind=M)
scene.append_to_caption('\n\n')
def setmass(b):
wt.text = '{:1.2f}'.format(b.value)
sl = slider(min=0.1, max=10, value=0.1, length = 1000, bind=setmass)
wt = wtext(text='{:1.2f}'.format(sl.value))
#mainloop
while (True):
rate(10)
currentobject.mass=currentobject.mass*sl.value
最后,我们模拟的用户应该能够在下拉菜单中选择行星或太阳。之后,用户应该能够更改所选对象的质量(使用滑块)并查看上面模拟中的效果(其他行星的轨道会发生变化,因为它们更容易被当前对象吸引)。
错误信息:
TypeError: 无法读取未定义的属性“质量”
【问题讨论】:
标签: menu astronomy vpython glowscript