为什么矩形不会出现或消失

2024-09-30 08:38:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着让一个长方形来射击相应的精灵,并在它击中时击败它。据我所知,这个矩形应该是在我单击空格并以5像素的move.ip[5,0]速度触发时创建的,但是我看不到这个矩形。我的代码有什么问题,为什么我看不到矩形。你知道吗

我的代码:

MESH = ((playerRect.topright[1] + 1), (playerRect.topright[1] + 1), (playerRect.centery - 10), (playerRect.centery + 10))
shootRect = pygame.draw.rect(screen, WHITE, MESH)

def baddieHasHitShoot():
    if baddieRect.colliderect(shootRect):
        return True
    return False

        if event.type == KEYDOWN:
            if event.key == ord(' '):
                shootRect()
                move.ip[5, 0]

    if baddieHasHitShoot():
        if score > topScore:
            score = topscore
            break

错误:

Traceback (most recent call last):
   line 105, in <module>
    shootRect()
TypeError: 'pygame.Rect' object is not callable

Tags: 代码ipeventmovereturnifpygamescore
2条回答

shootRect的调用缺少括号。应该是shootRect() 假设这是你试图调用的函数。你知道吗

如果它只是一个变量,你需要对它做些什么。你知道吗

shootRect内部baddieHasHitShoot是局部变量,与外部shootRect = pygame.draw.rect(screen, WHITE, MESH)无关

shootRect内部的baddieHasHitShoot不是函数,所以您可以执行它shootRect()。你知道吗

在函数中更好的使用不同的名字不要惊讶。你知道吗

baddieHasHitShoot内部,您可能必须使用

pygame.draw.rect(screen, WHITE, shootRect)

编辑1:

至于我,我不会用这样的东西

shootRect = pygame.draw.rect(screen, WHITE, MESH)

而是

shoot_rect = MESH
shoot_color = WHITE

然后用这个

pygame.draw.rect(screen, shoot_color, shoot_rect)

在我需要的地方。你知道吗


编辑2:

我想知道你需要什么:

MESH = ((playerRect.topright[1] + 1), (playerRect.topright[1] + 1), (playerRect.centery - 10), (playerRect.centery + 10))

shootRect = pygame.Rect( MESH[0], MESH[1], MESH[2], MESH[3] )

shooted = False

#     -

def baddieHasHitShoot(b_rect, s_rect):
    if b_rect.colliderect(s_rect):
        return True
    return False

#     -

if event.type == KEYDOWN:
    if event.key == ord(' '):
        # pygame.draw.rect(screen, WHITE, shootRect) # see below
        shooted = True

#     -

if baddieHasHitShoot( baddieRect, shootRect):
    if score > topScore:
        score = topscore
        break

编辑3:

pygame.draw.rect(screen, WHITE, shootRect)必须在bliting background之后和display.update()之前

    screen.blit(background, backgroundRect)
    screen.blit(playerImage, playerRect)
    screen.blit(baddieImage, baddieRect)

    if shooted:
        pygame.draw.rect(screen, WHITE, shootRect)
        shootRect.move_ip( (5, 0) )

    drawText('Score: %s' % (score), font, screen, 200, 0)
    drawText('Top Score: %s' % (topScore), font, screen, 195, 40)

    pygame.display.update()

相关问题 更多 >

    热门问题