问题描述
我在尝试绘制子弹时遇到问题,但它根本不起作用,这是代码
我正在看这个教程 https://youtu.be/FfWpgLFMI7w
我在任何地方都找不到答案
子弹没有出现我试图复制教程,在youtube上搜索
我让敌人和玩家移动
....
import pygame
import random
pygame.init()
pygame.display.init()
screen = pygame.display.set_mode((800,600))
bacground = pygame.image.load("background.png")
playerimg = pygame.image.load("spaceship.png")
playerX_change = 0
playerX = 360
playerY = 480
def player(x,y):
screen.blit(playerimg,(x,y))
enemyimg = pygame.image.load("enemy.png")
enemyX = random.randint(0,736)
enemyY = random.randint(50,150)
enemyX_change = 4
enemyY_change = 40
def enemy(x,y):
screen.blit(enemyimg,y))
bulletimg = pygame.image.load("enemy.png")
bulletX = playerX
bulletY = playerY
bulletX_change = 0
bulletY_change = 40
bullet_state = "ready"
def fire_bullet(x,y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletimg,(x + 16,y+10))
# drawing player on screen
# game loop
running = True
while running == True:
screen.fill((200,200,0))
screen.blit(bacground,(0,0))
player(playerX,playerY)
enemy(enemyX,enemyY)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
player(playerX,playerY)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerX_change = -5
if event.key == pygame.K_RIGHT:
playerX_change = 5
if event.type == pygame.K_SPACE:
fire_bullet(playerX,bulletY)
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
playerX_change = 0
playerX += playerX_change
enemyX += enemyX_change
if bullet_state == "fire" :
fire_bullet(bulletX,bulletY)
bulletY -= bulletY_change
if enemyX <= 0:
enemyX_change = 4
enemyY += enemyY_change
if enemyX>= 736:
enemyX_change = -4
enemyY += enemyY_change
if playerX <= 0:
playerX = 0
if playerX >= 736:
playerX = 736
...
解决方法
正如 Rabbid76 已经说过的:你必须在绘制子弹后更新显示。
想想你的代码是如何运行的:
while running:
screen.fill((200,200,0))
screen.blit(bacground,(0,0))
player(playerX,playerY)
enemy(enemyX,enemyY)
pygame.display.update()
...
fire_bullet(playerX,bulletY)
...
- 你填满了屏幕
- 您绘制背景图像
- 你画了玩家
- 你画了敌人
- 您更新显示并看到背景、玩家和敌人
- 你画子弹
- 你填满了屏幕
- 您绘制背景图像
- 你画了玩家
- 你画了敌人
- 您更新显示并看到背景、玩家和敌人
- 你画子弹
- 你填满了屏幕
- ...
所以,你看,每次绘制子弹时,你都会立即填满屏幕并在其上绘制背景图像。
在为框架绘制所有图像之后调用 pygame.display.update()
,而不是在中间调用。