微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何在pygame中绘制子弹

如何解决我如何在pygame中绘制子弹

我在尝试绘制子弹时遇到问题,但它根本不起作用,这是代码
我正在看这个教程 https://youtu.be/FfWpgLFMI7w 我在任何地方都找不到答案 子弹没有出现我试图复制教程,在youtube上搜索 我让敌人和玩家移动

enter image description here

....
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() ,而不是在中间调用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。