我正在用 Python 编写一个空间交易游戏,我决定需要将地图分成更小的块,以减少在任何给定时间在屏幕上绘制时需要考虑的对象数量。
这是通过使用 Sector 对象来处理的,该对象定义如下:
class Sector:
x=0 #Position of the sector. The galactic (absolute) position of any object is its in-sector position
y=0 #plus the galactic position offset times the size of a sector.
stardict=dict()
然后,生成器代码用 75 颗星填充每个扇区(目前为 100 个),并保存在 stardict 中。
thesector=Sector()
size=size/2
#Generate stars
for t in range(stars):
#name="Star "+str(t)
name=generate_name().capitalize()
thesector.stardict[name]=Star( name, (random.randint(-size,size), random.randint(-size,size)), (random.randint(0,255), random.randint(0,255), random.randint(0,255)), random.randint(3,7))
if math.floor((t/stars)*100)==(t/stars)*100: print("Generating stars: "+str((t/stars)*100)+"% done.")
但是,在尝试实际运行程序时会出现一些奇怪的错误,使用调试器打开它会显示原因:每个扇区的 stardict 属性是相同的,它们都包含完全相同的星号(不重复,它们具有相同的内存地址) . 据我所知,每个 Sector.stardict 实际上都引用了同一个 dict 对象。
我不知道为什么会这样。任何人都可以对此有所了解吗?