Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按下拍摄按钮时控制拍摄频率?_Python_Pygame - Fatal编程技术网

Python 按下拍摄按钮时控制拍摄频率?

Python 按下拍摄按钮时控制拍摄频率?,python,pygame,Python,Pygame,当按下按钮时,子弹会一次射出所有子弹,但如果按下按钮,我只希望它们每0.5秒射出一次 我试图输入时间和延迟子弹,但它只是延迟pygame本身 我有没有办法调节角色的拍摄频率 import pygame pygame.init() win = pygame.display.set_mode((700, 480)) pygame.display.set_caption("First project") run = True red = (255, 0, 0) green = (0, 255, 0

当按下按钮时,子弹会一次射出所有子弹,但如果按下按钮,我只希望它们每0.5秒射出一次

我试图输入时间和延迟子弹,但它只是延迟pygame本身

我有没有办法调节角色的拍摄频率

import pygame

pygame.init()

win = pygame.display.set_mode((700, 480))
pygame.display.set_caption("First project")
run = True
red = (255, 0, 0)
green = (0, 255, 0)


def drawbg():
    pygame.display.update()
    win.fill((255, 255, 255))
    for bullet in bullets:
        bullet.draw(win)


class person(object):
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 5
        self.IsJump = False
        self.jumpCount = 10
        self.left = False
        self.right = False

class projectile(object):
    def __init__(self, x, y, radius, colour, facing):
        self.x = x
        self.y = y
        self.radius = radius
        self.colour = colour
        self.facing = facing
        self.vel = 7 * facing

    def draw(self, win):
        pygame.draw.circle(win, self.colour, (self.x, self.y), self.radius)

man = person(100, 400, 50, 60)
man2 = person(500, 400, 50, 60)
bullets = []

while run:
    pygame.time.delay(25)

    for bullet in bullets:
        if bullet.x < 700 and bullet.x > 0:
            bullet.x += bullet.vel
        else:
            bullets.pop(bullets.index(bullet))


    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()

    if keys[pygame.K_g]:
        if man.left:
            facing = -1
        else:
            facing = 1
        if len(bullets) < 5:
            bullets.append(projectile(man.x + man.width//2, round(man.y + man.height/2), 6, (100, 100, 100), facing))


    if keys[pygame.K_p]:
        if man2.left:
            facing = -1
        else:
            facing = 1
        if len(bullets) < 50:
            bullets.append(projectile(man2.x + man2.width//2, round(man2.y + man2.height/2), 6, (0, 0, 0), facing))

    if keys[pygame.K_LEFT] and man2.x > man2.vel:
        man2.x -= man2.vel
        man2.left = True
        man2.right = False

    if keys[pygame.K_RIGHT] and man2.x < 700 - man2.width - man2.vel:
        man2.x += man2.vel
        man2.right = True
        man2.left = False

    if keys[pygame.K_a] and man.x > man.vel:
        man.x -= man.vel
        man.left = True
        man.right = False

    if keys[pygame.K_d] and man.x < 700 - man.width - man.vel:
        man.x += man.vel
        man.right = True
        man.left = False


    if not man.IsJump and keys[pygame.K_w]:
        man.IsJump = True
        man.JumpCount = 10

    if man.IsJump:
        if man.JumpCount >= -10:
            neg = 1
            if man.JumpCount < 0:
                neg = -1
            man.y -= (man.JumpCount ** 2) / 2 * neg
            man.JumpCount -= 1
        else:
            man.IsJump = False
            man.JumpCount = 10

    if not man2.IsJump and keys[pygame.K_UP]:
        man2.IsJump = True
        man2.JumpCount = 10

    if man2.IsJump:
        if man2.JumpCount >= -10:
            neg = 1
            if man2.JumpCount < 0:
                neg = -1
            man2.y -= (man2.JumpCount ** 2) / 2 * neg
            man2.JumpCount -= 1
        else:
            man2.IsJump = False
            man2.JumpCount = 10

    pygame.draw.rect(win, red, (man.x, man.y, man.width, man.height))
    pygame.draw.rect(win, green, (man2.x, man2.y, man2.width, man2.height))
    drawbg()

pygame.quit()
导入pygame
pygame.init()
win=pygame.display.set_模式((700480))
pygame.display.set_标题(“第一个项目”)
运行=真
红色=(255,0,0)
绿色=(0,255,0)
def drawbg():
pygame.display.update()
win.fill((255,255,255))
对于子弹中的子弹:
子弹。抽签(赢)
类人(对象):
定义初始值(自、x、y、宽度、高度):
self.x=x
self.y=y
self.width=宽度
自我高度=高度
self.vel=5
self.IsJump=False
self.jumpCount=10
self.left=False
self.right=False
类(对象):
定义初始(自、x、y、半径、颜色、面):
self.x=x
self.y=y
自半径=半径
颜色
自我面对
self.vel=7*面
def抽签(自我,赢):
pygame.draw.circle(赢,self.color,(self.x,self.y),self.radius)
人=人(1004005060)
man2=人(500、400、50、60)
项目符号=[]
运行时:
pygame。时间。延迟(25)
对于子弹中的子弹:
如果bullet.x<700且bullet.x>0:
bullet.x+=bullet.vel
其他:
子弹.弹孔(子弹.索引(子弹))
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
keys=pygame.key.get_pressed()
如果键[pygame.K_g]:
如果男子离开:
正面=-1
其他:
朝向=1
如果长度(项目符号)<5:
子弹.append(射弹(man.x+man.width//2,圆形(man.y+man.height/2),6,(100100100),正面))
如果键[pygame.K_p]:
如果man2.left:
正面=-1
其他:
朝向=1
如果透镜(子弹)<50:
项目符号.append(投射物(man2.x+man2.width//2,圆形(man2.y+man2.height/2),6,(0,0,0),面向))
如果键[pygame.K_LEFT]和man2.x>man2.vel:
man2.x-=man2.vel
man2.left=True
man2.right=False
如果键[pygame.K_RIGHT]和man2.x<700-man2.width-man2.vel:
man2.x+=man2.vel
man2.right=True
man2.left=False
如果键[pygame.K_a]和man.x>man.vel:
man.x-=man.vel
左=真
对=错
如果键[pygame.K_d]和man.x<700-man.width-man.vel:
man.x+=man.vel
正确的
左=假
如果不是man.IsJump和key[pygame.K_w]:
man.IsJump=True
man.JumpCount=10
如果man.IsJump:
如果man.JumpCount>=-10:
负=1
如果man.JumpCount<0:
负=-1
man.y-=(man.JumpCount**2)/2*neg
man.JumpCount-=1
其他:
man.IsJump=False
man.JumpCount=10
如果不是man2.IsJump和Key[pygame.K_UP]:
man2.IsJump=True
man2.JumpCount=10
如果man2.IsJump:
如果man2.JumpCount>=-10:
负=1
如果man2.JumpCount<0:
负=-1
man2.y-=(man2.JumpCount**2)/2*neg
man2.JumpCount-=1
其他:
man2.IsJump=False
man2.JumpCount=10
pygame.draw.rect(赢,红,(人x,人y,人宽,人高))
pygame.draw.rect(赢,绿,(man2.x,man2.y,man2.width,man2.height))
drawbg()
pygame.quit()

您可以检查最后一颗子弹的发射时间

通过以下方式启动变量:

import time

last_bullet = time.time()
然后将代码更改为:

if len(bullets) < 5:
    if time.time() - last_bullet > 0.5:
        last_bullet = time.time()
        bullets.append(projectile(man.x + man.width//2, round(man.y + man.height/2), 6, (100, 100, 100), facing))   
如果镜头(项目符号)<5:
如果time.time()-last_bullet>0.5:
最后一个项目符号=time.time()
子弹.append(射弹(man.x+man.width//2,圆形(man.y+man.height/2),6,(100100100),正面))

您可以维护时间戳。每次发射子弹时,你都会更新它,只有当时间戳至少有0.5秒时,你才允许发射子弹。这就是方法。如果不想使用时间模块,也可以使用
pygame.time.get_ticks()
(但它以毫秒而不是秒为单位工作)。