Hallo,
ich programmiere gerade ein Spiel in Pygame. Auf jeden Fall möchte ich den Ninja Wurfsternen (&anderen Waffen)Ammo geben, dass man eine bestimmte Anzahl von diesen hat und diese nicht spammen kann. Wenn man Space drückt, wird der Ammo Variable eins abgezogen und wenn der Ammo (heißt es der Ammo? ) höher als 0 ist, wird der Befehl self.shoot() ausgeführt. Jetzt mein Problem: Egal, welche Nummer die Variable hat (außer Null), kann ich einmal schießen und danach nicht mehr, auch wenn ich Space drücke. Ich weiß nur nicht wieso. Wenn ich es in einen while True, loop packe, hängt sich pygame auf. Nur wie kann ich das fixen, dass ich öfter als 1 Mal schießen kann. Hier mein benötigter Code (ohne den While True loop):
class Player(pg.sprite.Sprite):
def __init__(self, game, x, y):
self.weapon = 'blowpipe'
self.shurikan = False
self.blowpipe = False
self.xp = PLAYER_XP
self.shoot_ammo = True
self.BLOWPIPE_AMMO = 5
self.SHURIKAN_AMMO = 5
def get_keys(self):
keys = pg.key.get_pressed()
if keys[pg.K_SPACE]:
if self.weapon == 'blowpipe' and self.shoot_ammo == True:
self.BLOWPIPE_AMMO -= 1
if self.BLOWPIPE_AMMO < 0:
self.BLOWPIPE_AMMO = 0
if self.BLOWPIPE_AMMO == 0:
self.shoot_ammo = False
if self.BLOWPIPE_AMMO > 0:
self.shoot()
if self.weapon == 'shurikan' and self.shoot_ammo == True:
self.SHURIKAN_AMMO -= 1
if self.SHURIKAN_AMMO < 0:
self.SHURIKAN_AMMO = 0
if self.SHURIKAN_AMMO == 0:
self.shoot_ammo = False
if self.SHURIKAN_AMMO > 0:
self.shoot()
def shoot(self):
if self.shoot_ammo == True:
now = pg.time.get_ticks()
if now - self.last_shot > WEAPONS[self.weapon]['rate']:
self.last_shot = now
dir = vec(1, 0).rotate(-self.rot)
EinegleicheListegibtesfürBlowpipe.
pos = self.pos + BARREL_OFFSET.rotate(-self.rot)
self.vel = vec(-WEAPONS[self.weapon]['rate'], 0).rotate(-self.rot)
for i in range(WEAPONS[self.weapon]['count']):
spread = uniform(-WEAPONS[self.weapon]['spread'], WEAPONS[self.weapon]['spread'])
Blowpipe(self.game, pos, dir.rotate(spread))
Außerdem gibt es eine Weapons Liste in einem anderen File:
WEAPONS['blowpipe'] = {'img': 'blowpipe.png',
'speed': 500,
'lifetime': 600,
'rate': 300,
'kickback': 0,
'spread': 5,
'damage': 3,
'size': 'blowpipe',
'count': 1}
Eine ähnliche Liste benutze ich für den Shurikan. Thx