Entweder ich lös das Problem oder ich finde eine Möglichkeit eine Python 3.1 Exe zu bauen, naja,- hier der Fehler:
Der Fehler tritt auf wenn gefeuert wird, also wenn self.weapon.fire(self) in player4.update ausgelöst wird.TypeError: unbound method fire() must be called with TripleSmallBlue instance as
first argument (got Player4 instance instead)
was mir auffällt is das die methode fire in python 3.1 eine function at xxxxxx ist, anstelle von unbound.
nun der Relevante Code:
Code: Alles auswählen
class Player4(Sprite): # Bomber
def __init__(self, screen, playerimagefilename, initialposition, initialdirection, up, right, down, left, playerspeed, color, number, playermode):
Sprite.__init__(self)
self.screen = screen
self.base_image = pygame.image.load(playerimagefilename).convert_alpha()
self.image = self.base_image
self.playermode = playermode
self.image_w, self.image_h = self.image.get_size()
self.score = 0
self.scored = False
self.bounderror = False
self.up = up
self.right = right
self.down = down
self.left = left
self.speed = float(playerspeed)
self.max_speed = 3
self.acceleration = 0.1
self.pos = vec2d.vec2d(initialposition)
self.direction = vec2d.vec2d(initialdirection).normalized()
self.rotationspeed = 1
self.rotation = 0
self.min_speed = -1
self.color = color
self.rect = self.image.get_rect().move(self.pos.x - self.image_w / 2, self.pos.y - self.image_h / 2)
self.fire = 50
self.number = number
self.set_weapon(TripleSmallBlue)
def set_weapon(self, weapon):
self.weapon = weapon#(self)
def pupdate(self):
if self.scored == False:
.... (viele Sachen, gekürzt) ....
if self.fire <= 0:
self.weapon.fire(self)
self.fire += 50
self.fire -=1
Code: Alles auswählen
class Laser(Sprite):
def __init__(self, initialposition, initialdirection, number, rotation = 0, speed = 10):
Sprite.__init__(self)
self.image = pygame.image.load(os.path.join("data/Sprites", "Projectile.png")).convert_alpha()
self.pos = vec2d.vec2d(initialposition)
self.direction = vec2d.vec2d(initialdirection).normalized()
self.direction.rotate(rotation)
self.image_w, self.image_h = self.image.get_size()
self.rect = self.image.get_rect().move(self.pos.x - self.image_w / 2, self.pos.y - self.image_h / 2)
self.life = 200
self.speed = speed
self.damage = 1
self.pnumber = number
def update(self):
if 1 > self.life:
self.kill()
displacement = vec2d.vec2d(
self.direction.x * self.speed,
self.direction.y * self.speed)
self.pos += displacement
self.rect = self.image.get_rect().move(self.pos.x - self.image_w / 2, self.pos.y - self.image_h / 2)
self.life -= 1
Code: Alles auswählen
class TripleSmallBlue:
def fire(player):
Game.projectiles.add(Laser(player.pos, player.direction, player.number))
Game.projectiles.add(Laser(player.pos, player.direction, player.number, rotation = 3))
Game.projectiles.add(Laser(player.pos, player.direction, player.number, rotation = -3))