<p>如果我没听错,你想让Enermy实例访问Player实例</p>
<p>有两种方法可以完成它。我在程序中使用第二种方法atm,并计划添加第一种方法。在</p>
<p>第一种方法是让类拥有一个实例,调用一个类方法可以获得该实例。在</p>
<pre><code>class Game:
instance = False
def __init__(self):
if self.__class__.instance:
raise RunTimeError("Game has already been initialized.") # RunTimeError might be a bad choice, but you get the point
self.__class__.instance = self
@classmethod
def getInstance(cls):
return cls.instance
##>>> g = Game()
##>>> g
##<__main__.Game instance at 0x02A429E0>
##>>> del g
##>>> Game.getInstance()
##<__main__.Game instance at 0x02A429E0>
##>>>
## Here you can have, in your enermy class, g = Game.getInstance(). And g.player will be able to access the player instance, and its properties
</code></pre>
<p>第二种方法就是我一直在用的方法。它涉及到让游戏类管理游戏中的所有内容。意思:一切都是游戏中的变数。另外,每个游戏变量(例如,一个玩家)都有一个名为game的属性,该属性引用回游戏实例。在</p>
<p>示例:</p>
^{pr2}$
<p>有些人可能反对第二种方法,我也看到了问题的额外步骤。也许有人能对二者的比较有所启示。在</p>
<p>一个组合方法可能是我希望转移到的,但是这会引起一些问题,你需要把哪个放在文件的第一位,否则你可能会得到播放器未定义或游戏没有定义。虽然我认为可以通过将这两个类分成不同的文件来解决。在</p>
<pre><code>class Player:
def __init__(self):
self.game = Game.getInstance()
class Game:
instance = False
def __init__(self):
if self.__class__.instance:
raise RunTimeError("Game has already been initialized.") # RunTimeError might be a bad choice, but you get the point
self.__class__.instance = self
@classmethod
def getInstance(cls):
return cls.instance
</code></pre>