首页 > 解决方案 > 我不知道我在 Pygame 中的边框出了什么问题,我需要帮助根据按下的键来旋转我的播放器图标

问题描述

所以我在#Border 下编写了我的边框代码,但我不知道它有什么问题。当我运行程序时,图标仅在 x 和 y 轴都达到零时才与边框碰撞,而不是在 x 和 y-64 像素达到最大值时才与边框碰撞。另外我想知道如何根据用户键输入旋转图像。

import pygame
    
pygame.init()
screen = pygame.display.set_mode((900, 500))
# Game Window caption
pygame.display.set_caption("Snake Time")

# Game Window Icon

icon = pygame.image.load('snake.png')
pygame.display.set_icon(icon)

# Snake Player Image
Snake_Player = pygame.image.load('Snake Head.png')
PlayerX = 420
PlayerY = 435
PlayerX_Change = 0
PlayerY_Change = 0


def player(x, y):
    screen.blit(Snake_Player, (x, y))


running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # Player Movement
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                PlayerX_Change = -0.7
                PlayerY_Change = 0
            if event.key == pygame.K_RIGHT:
                PlayerX_Change = 0.7
                PlayerY_Change = 0
            if event.key == pygame.K_UP:
                PlayerY_Change = -0.7
                PlayerX_Change = 0
            if event.key == pygame.K_DOWN:
                PlayerY_Change = 0.7
                PlayerX_Change = 0
    #Border
    if PlayerX <= 0:
        PlayerX = 0
    elif PlayerX >= 836:
        PlayerX = 0
    elif PlayerY <= 0:
        PlayerY = 0
    elif PlayerY >= 500:
        PlayerY = 0
    PlayerX += PlayerX_Change
    PlayerY += PlayerY_Change
    # Game Window Color
    screen.fill((30, 90, 0))
    player(PlayerX, PlayerY)
    pygame.display.update()

标签: pythonpygame

解决方案


我建议pygame.key.get_pressed()用于玩家的移动,而不是KEYDOWN事件。
此外,使用 apygame.Rect来评估与边界的碰撞。pygame.Surface可以通过以下方法获得大小为 的矩形get_rect()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    # Player Movement
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        PlayerX -= 0.7
    if keys[pygame.K_RIGHT]:
        PlayerX += 0.7
    if keys[pygame.K_UP]:
        PlayerY -= 0.7
    if keys[pygame.K_DOWN]:
        PlayerY += 0.7
    
    #Border
    player_rect = Snake_Player.get_rect(topleft = (PlayerX, PlayerY))
    if player_rect.left < 0:
        PlayerX = 0
    elif player_rect.right > screen.get_width():
        PlayerX = screen.get_width() - player_rect.width
    if player_rect.top < 0:
        PlayerY = 0
    elif player_rect.bottom > screen.get_height():
        PlayerY = screen.get_height() - player_rect.height
    
    # Game Window Color
    screen.fill((30, 90, 0))
    player(PlayerX, PlayerY)
    pygame.display.update()

推荐阅读