我正在尝试制作游戏,并且试图将主程序精美地拆分为更多文件。我试图将所有图像放在另一个文件中,但是当我运行主程序时,它显示一个错误,提示我正在使用的列表不存在,但实际上它们在我导入的另一个文件中。我将在此处保留我的GitHub链接,以便您可以更好地理解我的意思。
答案 0 :(得分:2)
请注意您如何导入images123
,然后从final_game
导入。这不是一个很好的模式,因为它会导致循环导入。尽管循环导入 可以起作用,但它们可能会在各个方面导致问题。
就目前而言,您的问题与导入无关,而与编写代码的方式更多有关。您希望图像大小基于您的 player 对象(这就是为什么您需要final_game.man
才能运行images123
的原因),因此具有作为 player 对象初始化的一部分。最终,您可能想使用子类进一步将其删除,但是现在,我只是建议添加一种方法来处理它。这还将使大多数图像变量脱离全局空间,从长远来看将为您提供帮助。
例如:
class Player():
def __init__(self, [etc]):
[...]
self.formatsprites()
def formatsprites(self):
self.idle = [py.transform.scale(img,(self.width,self.length)) for img in image123.idle]
self.run_right = [py.transform.scale(img,(man.width,man.length)) for img in image123.run_right]
[...]
从那里,您将调整代码以引用self.idle
(或可能的其他名称),而不是简单地idle
,并从import final_game
中删除images123
和其他相关行。您可能还决定(由于Player
现在有更多内容),您想要像将图像移到另一个文件一样,将player
和bullets
移到另一个文件中。
您还可以进行其他一些结构上的更改以加强代码,但这只是学习过程的一部分,其余部分由您自己决定。恭喜您完成了许多工作,并祝其他人好运:)
答案 1 :(得分:0)
将final_game.py中的导入语法更改为:
module FACINGS
NORTH = [0, 1]
SOURTH = [0, -1]
EAST = [1, 0]
WEST = [-1,0]
end
class Robot
attr_reader :position
def initialize(attr = {})
@position = attr[:position] || [1, 1]
end
def move(facings)
@position[0] += facings[0]
@position[1] += facings[1]
end
end
r = Robot.new
r.move(FACINGS::NORTH)
r.move(FACINGS::SOURTH)
r.move(FACINGS::WEST)
r.move(FACINGS::EAST)
这会将所有的变量,函数,类,对象等从images123.py导入到final_game.py,前提是该文件位于同一目录中。