python - pygame“screen.fill 命令”,我把它放在哪里?
问题描述
我最近在 screen.fill 命令中遇到困难,我的程序运行良好,但字符很紧张,有时不会出现在屏幕上,我尝试将命令从不同的位置放在代码中。它有时也会留下痕迹
... import pygame
pygame.init()
pygame.display.init()
#creation of screen
screen = pygame.display.set_mode((800, 600))
#window title
# game.display.set_caption("space invaders")
#player coordinates
playerX = 360
playerY = 480
#player image
playerimg = pygame.image.load("spaceship.png")
#player change distance
playerX_change = 0
#drawing player on screen
def player(x, y):
pygame.display.flip()
pygame.display.update()
screen.blit(playerimg, (x, y))
#game loop
running = True
while running == True:
#event system
for event in pygame.event.get():
screen.fill((0, 0, 0))
#exit function
if event.type == pygame.QUIT:
pygame.quit()
player(playerX, playerY)
#arrows key press detection or movement system
if event.type == pygame.KEYDOWN:
player(playerX,playerY)
if event.key == pygame.K_LEFT:
playerX_change = -0.3
if event.key == pygame.K_RIGHT:
playerX_change = 0.3
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
playerX_change = 0
#movement
playerX += playerX_change
...
解决方案
清除屏幕一次,然后在屏幕上绘制对象。实际上你screen.fill
在事件循环中调用。事件循环对每个事件执行一次。从事件循环移动screen.fill
到应用程序循环。应用程序循环每帧执行一次。
while running == True:
screen.fill((0, 0, 0)) # insert
#event system
for event in pygame.event.get():
#screen.fill((0, 0, 0)) # delete
#exit function
if event.type == pygame.QUIT:
pygame.quit()
# [...]
此外,在绘制所有对象后仅更新一次显示。请参阅为什么 PyGame 动画闪烁。
推荐阅读
- json - Grails json-views 似乎被忽略了
- javascript - 使用map函数代替嵌套循环条件JS
- c# - .net 核心自定义授权与属性最佳实践
- c# - 如何使用 AutoMapper 通过构造函数进行映射以及解析注入的服务
- javascript - 隐藏文本中的特定单词而不添加新标签
- reactjs - 如何通过锚标签传递道具?
- android - 使用 ImagePicker 库从图库上传图像并使用 Glide 库在 ImageView 中设置
- c# - 从 RDB 文件中读取数据
- ios - 将观察者添加到自身或对象有什么区别?
- node.js - Sequelize `findOne` 工作不如预期