【问题标题】:How to remove sprite completely from screen pygame如何从屏幕pygame中完全删除精灵
【发布时间】:2019-06-10 15:04:48
【问题描述】:

每当我在游戏中击中硬币(收藏品)时,它们必须完全从屏幕上消失,但这不会发生。击中后它确实消失了,但它仍然存在,当我处于硬币位置时,它会增加我的分数

这是检查碰撞的代码:

# 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

还有我的 Coin Class(它包括 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

谁能帮我弄清楚我应该如何从屏幕上完全删除硬币精灵,或者以其他方式删除硬币,但当我停留在硬币位置时,分数不会增加

【问题讨论】:

  • 它不起作用 = 我没有在组中添加精灵

标签: python pygame


【解决方案1】:

仅在“硬币”尚未被击中时检查碰撞:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2017-11-21
    • 2018-06-20
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多