Python继承问题
我在做游戏,我有一些问题。。。我有一个加载地图的函数(通常在玩家与大门碰撞时)。我有两个门和两张地图(每张地图上有一个门)。当我走到一个门时,第二张地图被载入,当我穿过该地图上的一个门时,第一张地图被载入。我在第一张地图上还有一棵树。除非我点击那棵树,否则一切正常。这是非常奇怪的,因为我没有任何处理它的方法!什么都不应该发生!事实上,什么也没发生,除了当我试图从第二张地图回来时,它不起作用 这是我一直收到的错误消息:Python继承问题,python,Python,我在做游戏,我有一些问题。。。我有一个加载地图的函数(通常在玩家与大门碰撞时)。我有两个门和两张地图(每张地图上有一个门)。当我走到一个门时,第二张地图被载入,当我穿过该地图上的一个门时,第一张地图被载入。我在第一张地图上还有一棵树。除非我点击那棵树,否则一切正常。这是非常奇怪的,因为我没有任何处理它的方法!什么都不应该发生!事实上,什么也没发生,除了当我试图从第二张地图回来时,它不起作用 这是我一直收到的错误消息: Traceback (most recent call last): File
Traceback (most recent call last):
File "guilds.py", line 820, in <module>
load_map(objekt.gate_path, objekt.name, False)
File "guilds.py", line 287, in load_map
npc(o[1], o[3])
File "guilds.py", line 147, in __init__
creature.__init__(self, pos, name)
TypeError: __init__() takes exactly 3 arguments (4 given)
b) NPC继承自的生物:
class creature():
def __init__(self, pos, name):
self.pic = []
self.lista_slika = crt.crt[name]['ls_slk']
for slika in self.lista_slika:
self.pic.append(pygame.image.load(slika).convert()) #load the image
for slika in self.pic:
self.colorkey = slika.get_at((0,0)) #get the colokey from the first pixel (0,0)
slika.set_colorkey(self.colorkey, RLEACCEL)
self.counter = int(time.time())
self.time = int(time.time())
self.pos = pos
self.rect = self.pic[0].get_rect() #get image rectangle
self.rect = self.rect.move(self.pos) #get the rectangle on the starting position
self.current_health = crt.crt[name]['health']
self.max_health = crt.crt[name]['health']
self.name = name
self.targeted = False
self.targeted_3 = False
lista_creature.append(self)
def follow(self):
if self.face == 0:
self.rect = self.rect.move(NPCspeed_right)
self.pos = (self.pos[0] + NPCspeed_right[0], self.pos[1] + NPCspeed_right[1])
if self.face == 1:
self.rect = self.rect.move(NPCspeed_left)
self.pos = (self.pos[0] + NPCspeed_left[0], self.pos[1] + NPCspeed_left[1])
if self.face == 2:
self.rect = self.rect.move(NPCspeed_up)
self.pos = (self.pos[0] + NPCspeed_up[0], self.pos[1] + NPCspeed_up[1])
if self.face == 3:
self.rect = self.rect.move(NPCspeed_down)
self.pos = (self.pos[0] + NPCspeed_down[0], self.pos[1] + NPCspeed_down[1])
def die(self):
self.randin = random.randint(-100, 100)
self.randin2 = random.randint(-100, 100)
self.pos = (self.pos[0] + self.randin, self.pos[1] + self.randin2)
self.combat = False
self.current_health = self.max_health
self.rect.move_ip(self.randin, self.randin2)
self.targeted = False
for quest in lista_quest:
if quest.target_name == self.name and quest.onit == True:
quest.goal -= 1
你有一个全局变量“bioture”,它隐藏着你的类。你能在异常抛出的地方发布一些来自
guilds.py
的代码吗?你能在呼叫ctor之前打印出self、pos、name
吗?你粘贴的代码看起来不错,你确定这是正确的代码吗?回溯中标记了哪些行?实际上我不确定,我以为这是代码中的某个东西。。。奇怪,你能和我联系吗?这样我就可以给你发更多的代码了?yanncore@gmail.comIn哪一班?我看不出来。。。联系我yanncore@gmail.com请:)别客气,+1@Yann:你可能有一个全局变量定义为bioter=bioter()
——它不在你给我们看的代码中,所以我们不能告诉你在哪里。顺便说一下,类名应该是大写的,部分是为了避免这个问题。我爱你,伙计!这是真的!有一个所有生物的列表,我这样做了:对于l_生物中的生物:所以我把单词“生物”改为“crtr”,现在它可以工作了!如果这是标准的话,我会马上开始重命名我的类。那么第一个字母应该是大写的?如果它不止一个词,那么它是像这个人熊猪一样的东西?再次感谢@Yann:有关命名约定和其他编码样式的指导,请参阅。@Yann:呵呵,很高兴能为您提供帮助。你不知道这种事发生在我身上的频率有多高。现在我把我所有的类都这样命名(没有一个变量)。如果有一个类(比如“object”)与此不同,我会开始感到不安;-)
class creature():
def __init__(self, pos, name):
self.pic = []
self.lista_slika = crt.crt[name]['ls_slk']
for slika in self.lista_slika:
self.pic.append(pygame.image.load(slika).convert()) #load the image
for slika in self.pic:
self.colorkey = slika.get_at((0,0)) #get the colokey from the first pixel (0,0)
slika.set_colorkey(self.colorkey, RLEACCEL)
self.counter = int(time.time())
self.time = int(time.time())
self.pos = pos
self.rect = self.pic[0].get_rect() #get image rectangle
self.rect = self.rect.move(self.pos) #get the rectangle on the starting position
self.current_health = crt.crt[name]['health']
self.max_health = crt.crt[name]['health']
self.name = name
self.targeted = False
self.targeted_3 = False
lista_creature.append(self)
def follow(self):
if self.face == 0:
self.rect = self.rect.move(NPCspeed_right)
self.pos = (self.pos[0] + NPCspeed_right[0], self.pos[1] + NPCspeed_right[1])
if self.face == 1:
self.rect = self.rect.move(NPCspeed_left)
self.pos = (self.pos[0] + NPCspeed_left[0], self.pos[1] + NPCspeed_left[1])
if self.face == 2:
self.rect = self.rect.move(NPCspeed_up)
self.pos = (self.pos[0] + NPCspeed_up[0], self.pos[1] + NPCspeed_up[1])
if self.face == 3:
self.rect = self.rect.move(NPCspeed_down)
self.pos = (self.pos[0] + NPCspeed_down[0], self.pos[1] + NPCspeed_down[1])
def die(self):
self.randin = random.randint(-100, 100)
self.randin2 = random.randint(-100, 100)
self.pos = (self.pos[0] + self.randin, self.pos[1] + self.randin2)
self.combat = False
self.current_health = self.max_health
self.rect.move_ip(self.randin, self.randin2)
self.targeted = False
for quest in lista_quest:
if quest.target_name == self.name and quest.onit == True:
quest.goal -= 1