Как полностью удалить спрайт из экрана Pygame - PullRequest
1 голос
/ 10 июня 2019

Всякий раз, когда я бью монеты (предметы коллекционирования) в моей игре, они должны полностью исчезать с экрана, но этого не происходит. После удара он исчезает, но он все еще там, что увеличивает мой счет, когда я нахожусь в положении монет

Вот код для проверки столкновения:

# This function works for Coins Only
def coinsHit_or_not(self, hero, thecoin):
    hit = pygame.sprite.collide_rect(hero, thecoin)

    if hit:
        thecoin.hit()
        self.score += 2

и мой класс монет (включает функцию hit ()):

class Coins(pygame.sprite.Sprite):

    coinsFadeAway = [pygame.image.load('CoinsFadeAway/CS1.png'), pygame.image.load('CoinsFadeAway/CS2.png'),
                     pygame.image.load('CoinsFadeAway/CS3.png'), pygame.image.load('CoinsFadeAway/CS4.png'),
                     pygame.image.load('CoinsFadeAway/CS5.png'), pygame.image.load('CoinsFadeAway/CS6.png'),
                     pygame.image.load('CoinsFadeAway/CS7.png'), pygame.image.load('CoinsFadeAway/CS8.png'),
                     pygame.image.load('CoinsFadeAway/CS9.png'), pygame.image.load('CoinsFadeAway/CS10.png'),
                     pygame.image.load('CoinsFadeAway/CS11.png')]

    def __init__(self, x, y):
        super().__init__()
        self.x = x
        self.y = y
        self.coinTouched = False
        self.coins = pygame.image.load('CoinOG_Small.png')
        self.coinSpin = 0
        self.rect = self.coinsFadeAway[0].get_rect().move(x, y)

    def draw(self, window):
        if not self.coinTouched:
            window.blit(self.coins, (self.x, self.y))
            if self.coinSpin < 11:
                window.blit(self.coinsFadeAway[self.coinSpin], (self.x, self.y))
                self.coinSpin += 1
            elif self.coinSpin > 11:
                self.coinTouched = False

    def hit(self):
        self.coinTouched = True

Может ли кто-нибудь помочь мне выяснить, как мне полностью удалить этот спрайт с экрана или наоборот, чтобы монеты исчезли, но счет не увеличился, когда я остался в позиции монет

1 Ответ

0 голосов
/ 10 июня 2019

Проверка на столкновение только в том случае, если «Монета» еще не была нажата:

def coinsHit_or_not(self, hero, thecoin):

    if not thecoin.coinTouched:
        hit = pygame.sprite.collide_rect(hero, thecoin)
        if hit:
            thecoin.hit()
            self.score += 2

Или добавьте метод к классу Coins, который выполняет проверку столкновения:

class Coins(pygame.sprite.Sprite):

    # [...]

    def collide(self, hero)
        if self.coinTouched:
            return False
        self.coinTouched = pygame.sprite.collide_rect(hero, self)
        return self.coinTouched      
def coinsHit_or_not(self, hero, thecoin):
    if thecoin.collide(hero)
        self.score += 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...