如果我理解正確的話,你想有Enermy情況下,獲取到播放器實例
的訪問有2種方式來完成它。我在我的程序中使用第二種方法atm,並計劃添加第一種方法。
第一種方式涉及讓類有一個實例,並調用一個類方法允許獲取該實例。
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
第二種方法是我一直在努力。它涉及讓遊戲類在遊戲中調節一切。含義:一切都是遊戲中的變數。此外,每一個遊戲變量(例如玩家)都會擁有一個名爲game的屬性,該屬性返回到遊戲實例。
例子:
class Player:
def __init__(self, game):
self.game = game
print self.game.enermy
class Game:
def __init__(self):
self.enermy = "Pretend I have an enermy object here"
self.player = Player(self)
##>>> g = Game()
##Pretend I have an enermy object here
##>>> g.player.game.enermy
##'Pretend I have an enermy object here'
##>>>
## Iin your enermy class, self.game.player will be able to access the player instance, and its properties
有些人可能會與具有第二種方式反對,我也看到了問題的額外步驟。也許有人可以對比較兩者之間的關係2.
一個組合方法可能是我希望移動到,但是這提出了一些問題,你需要首先放在文件中,否則你可能會得到未定義的玩家或遊戲未定義。雖然我認爲它可以通過將2個類分成不同的文件來解決。
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