python - 我不知道我在 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()
解决方案
我建议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()
推荐阅读
- python - BeautifulSoup Python为具有属性的特定标签提取标签标题
- bash - 与 bash 配置文件相关的终端中的错误替换错误
- html - 无序列表元素上的旁白明确说“子弹”
- javascript - onclick 开始动画
- javascript - 如何根据使用脚本从上一个问题中选择的日期更新 Google 表单上的多项选择题
- groovy - Groovy - 将字符串转换为嵌套列表
- r - R中GAM模型中基因组变量的空间自相关
- python - 在使用 skimage 计算 2 个图像之间的度量之前应用掩码
- python - 尝试使用 Python 和 Chromedriver 从网站上抓取数据,但它返回“查找”的非类型错误
- angular - 使用 Visual Studio Code 将简单的 Angular 8 应用程序部署到 Azure