python - 为什么 Pygame 中的精灵现在没有绘制,它之前加载了?
问题描述
所以运行时我的代码中的“子弹(或laser.png)”精灵不会绘制。我在代码中破坏了一些东西,试图解决精灵留下痕迹的另一个问题。我尝试了多种方法,但最终破坏了我的代码(对不起,我是 pygame 的新手,无论如何这可能是一个愚蠢的问题)。我之前还定义了所有变量
def redrawGameWindow(win, HeroX,HeroY):
win.blit(bg, (0,0))
win.blit(HeroSprite, (HeroX, HeroY))
win.blit(EnemySprite, (EnemyX, EnemyY))
pygame.draw.rect(bg, (211,211,211), (430 - 5, 25 - 5, EnemyHealth + 10, 30 + 10))
pygame.draw.rect(bg, (255,0,0), (430, 25, EnemyHealth, 30))
pygame.draw.rect(bg, (211,211,211), (430 - 5, 665 - 5, EnemyHealth + 10, 30 + 10))
pygame.draw.rect(bg, (0,255,0), (430, 665, PlayerHealth, 30))
pygame.display.update()
def fire_bullet(x, y):
global BulletState
BulletState = "fire"
win.blit(Laser, (BulletX,BulletY))
while GameRun:
clock.tick(60)
pressed = pygame.key.get_pressed()
EnemyX += EnemyVel
if EnemyX <= 0 :
EnemyVel = 5
elif EnemyX >= winX - 60:
EnemyVel = -5
if pressed[pygame.K_LEFT]:
HeroX -= vel if HeroX > 0 else 0
elif pressed[pygame.K_RIGHT]:
HeroX += vel if HeroX < winX - 57 else 0
if pressed[pygame.K_SPACE]:
if BulletState == "ready" :
BulletX = HeroX
fire_bullet(BulletX, BulletY)
for event in pygame.event.get():
if event.type == pygame.QUIT:
GameRun = False
if BulletY <= 0:
BulletY = HeroY
BulletState = "ready"
if BulletState == "fire":
fire_bullet(BulletX, BulletY)
BulletY -= BulletVel
redrawGameWindow(win, HeroX, HeroY)
pygame.quit()
解决方案
您正在调用fire_bullet
绘制子弹的函数,但在更新显示之前,您正在调用redrawGameWindow
覆盖所有内容的函数。
推荐阅读
- angular - 如何为多个按钮创建 Angular 2+ 切换?
- python - 如何从列表中选择一个随机值?
- google-bigquery - Talend BigQuery - SQL
- python-3.x - 如何修复 Colaboratory 中的 zipfile 读取错误?
- android - 无法使用 com.android.billingclient:billing 获取 SkuDetail
- python-3.x - 如何将文件复制回一个目录?
- python - 仅针对单元测试禁用 pylint 保护访问
- oracle - 从 2 字段 oracle 计算日期
- c++ - 为什么 libc++ 不支持这样一个基本的原子操作?
- php - 在 codeigniter 中处理大型数据集