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

pygame射击多发子弹

如何解决pygame射击多发子弹

我试图射击多个子弹,但我只能射击1个子弹,然后我必须重新启动游戏。我如何射击多个子弹,我尝试做循环,但我无法使它们工作

import pygame
import sys

pygame.init()
bg=pygame.display.set_mode((1300,640))
FPS=pygame.time.Clock()
p=x,y,width,height=(0,100,100)
b=b_x,b_y,b_width,b_height=(x,25,25)
bullets=[99]
shoot=False
def draw():
    global bullet,b_x,shoot,m
    b_x+=50
    m=b_y+50
    bullet=pygame.draw.rect(bg,(0,255),(b_x+100,m,b_height))
    something()

def something():
    pygame.draw.rect(bg,(b_x + 100,b_height))


while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type==pygame.KEYDOWN:
            if event.key==pygame.K_LEFT:
                x-=50

            if event.key==pygame.K_RIGHT:
                x+=50

            if event.key==pygame.K_SPACE:
                shoot=True

bg.fill((0,0))
player1=pygame.draw.rect(bg,(255,0),(x,height))
if shoot:
    draw()

pygame.display.update()
FPS.tick(30)

解决方法

要重新加载,只需重置射击标记和子弹位置即可。

尝试此更新:

if shoot:
    draw()
    if b_x > 1300:  # off screen
        b_x = 0
        shoot=False  # wait for space to re-shoot

要快速射击,请使用列表存储子弹位置。空格键将添加到项目符号列表中。当项目符号离开屏幕时,将其从列表中删除。

import pygame
import sys

pygame.init()
bg=pygame.display.set_mode((1300,640))
FPS=pygame.time.Clock()
p=x,y,width,height=(0,100,100)
b=b_x,b_y,b_width,b_height=(x,25,25)
bullets=[] # all active bullets
shoot=False
def draw():
    global bullets,bullet,b_x,shoot,m
    #b_x+=50
    m=b_y+50
    for i in range(len(bullets)):
       b_x = bullets[i] # x position of bullets
       bullet=pygame.draw.rect(bg,(0,255),(b_x+100,m,b_height))
       bullets[i] += 50  # move each bullet
    bullets = [b for b in bullets if b < 1300] # only keep bullets on screen   

while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type==pygame.KEYDOWN:
            if event.key==pygame.K_LEFT:
                x-=50

            if event.key==pygame.K_RIGHT:
                x+=50

            if event.key==pygame.K_SPACE:
                bullets.append(0)  # add new bullets

    bg.fill((0,0))
    player1=pygame.draw.rect(bg,(255,0),(x,height))
    if len(bullets):  # if any active bullets
        draw()

    pygame.display.update()
    FPS.tick(30)

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