У меня есть этот метод, который при вызове меняет оружие для игрока, я хочу как-то определить, является ли текущее оружие уже новым оружием. Я пробовал с is
и pygame.surface.get_at()
, но это не сработало. В конце концов я выполню другое действие, когда оружие останется прежним, а оператор печати пока есть, чтобы проверить, работает ли он.
class BulletsManager:
"""The BulletsManager class manages the player bullets."""
def __init__(self, game):
self.game = game
self.thunder_weapon = pygame.image.load(WEAPONS['thunderbolt'])
self.fire_weapon = pygame.image.load(WEAPONS['firebird'])
def change_weapon(self, player, weapon_name):
"""Change the player weapon."""
if player == "thunderbird":
new_weapon = pygame.image.load(WEAPONS[weapon_name])
if new_weapon == self.thunder_weapon:
print('New weapon is the same as the current one')
else:
self.thunder_weapon = new_weapon
elif player == "phoenix":
self.fire_weapon = pygame.image.load(WEAPONS[weapon_name])
pygame.surface.get_at()
это очень трудоемкая операция.
Я нашел решение для решения проблемы:
class BulletsManager:
"""The BulletsManager class manages the player bullets."""
def __init__(self, game):
self.game = game
self.thunder_weapon = pygame.image.load(WEAPONS['thunderbolt'])
self.current_thunder_weapon = 'thunderbolt'
self.fire_weapon = pygame.image.load(WEAPONS['firebird'])
self.current_fire_weapon = 'firebird'
def set_weapon(self, player, weapon_name):
"""Change the player weapon."""
if player == "thunderbird":
if weapon_name == self.current_thunder_weapon:
print('New weapon is the same as the current one. - thunder')
else:
self.thunder_weapon = pygame.image.load(WEAPONS[weapon_name])
self.current_thunder_weapon = weapon_name
elif player == "phoenix":
if weapon_name == self.current_fire_weapon:
print("New weapon ins the same as the current one - fire")
else:
self.fire_weapon = pygame.image.load(WEAPONS[weapon_name])
self.current_fire_weapon = weapon_name
Или с помощью словаря:
class BulletsManager:
"""The BulletsManager class manages the player bullets."""
def __init__(self, game):
self.game = game
self.weapons = {
"thunderbird": {
"weapon": pygame.image.load(WEAPONS['thunderbolt']),
"current": "thunderbolt"
},
"phoenix": {
"weapon": pygame.image.load(WEAPONS["firebird"]),
"current": "firebird"
}
}
def set_weapon(self, player, weapon_name):
"""Change the player weapon."""
if weapon := self.weapons.get(player):
if weapon_name == weapon["current"]:
print('New weapon is the same as the current one.')
else:
weapon["weapon"] = pygame.image.load(WEAPONS[weapon_name])
weapon["current"] = weapon_name
Вы меняете изображение, чтобы знать оружие. Сохраните название оружия в атрибуте.