Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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 在运行while循环的中途检查事件?_Python_Pygame - Fatal编程技术网

Python 在运行while循环的中途检查事件?

Python 在运行while循环的中途检查事件?,python,pygame,Python,Pygame,因此,在pygame中,您有一个持续循环的while循环,然后是for循环中的事件处理程序,然后是要持续执行的代码 我需要在while循环中执行一行代码之后处理一个事件,尽管它们相互影响,但我还需要在执行该行代码之前处理一个不同的事件 在我的主while循环中,如何处理一组事件、执行一些代码,然后处理另一组事件?已解决 我在用户事件处理程序中将变量设置为1,然后在需要执行代码的地方,检查变量是否等于1,如果等于1,则执行代码并将变量设置回0 好东西 如果有人想帮我找到更好的解决方案,下面是我的代

因此,在pygame中,您有一个持续循环的while循环,然后是for循环中的事件处理程序,然后是要持续执行的代码

我需要在while循环中执行一行代码之后处理一个事件,尽管它们相互影响,但我还需要在执行该行代码之前处理一个不同的事件

在我的主while循环中,如何处理一组事件、执行一些代码,然后处理另一组事件?

已解决

我在用户事件处理程序中将变量设置为1,然后在需要执行代码的地方,检查变量是否等于1,如果等于1,则执行代码并将变量设置回0

好东西

如果有人想帮我找到更好的解决方案,下面是我的代码;)(有点长):

uif=“images/userGray.png”
bif=“images/bg.jpg”
cif=“images/chair3.png”
i=0
playerX=1
playerY=1
pX=1
pY=1
bX=0
比=0
moveX=0
moveY=0
windowX=640
窗口Y=480
lowerY=1024
下限=1024
项目符号=[]
x=0
y=0
旋转=假
对象=[]
append([256260410511])
导入pygame,sys
从pygame.locals导入*
pygame.init()
screen=pygame.display.set_模式((640480),0,32)
background=pygame.image.load(bif.convert())
user=pygame.image.load(uif.convert_alpha())
chair=pygame.image.load(cif.convert_alpha()
chair1=pygame.image.load(cif.convert_alpha()
pygame.time.set_计时器(USEREVENT+1100)
def射击(内陆、中陆、武器):
bulletId=len(项目符号)
项目符号[bulletId]=[inLoc,clLoc,200,3]
移动速度=.1
尽管如此:
对于pygame.event.get()中的事件:
如果event.type==退出:
pygame.quit()
sys.exit()
如果event.type==USEREVENT+1:
旋转=真;
如果event.type==KEYDOWN:
如果event.key==K_LEFT或event.key==K_a:
moveX=-1*moveSpeed
elif event.key==K_RIGHT或event.key==K_d:
moveX=移动速度
如果event.key==K_DOWN或event.key==K_s:
moveY=移动速度
elif event.key==K\u UP或event.key==K\u w:
moveY=-1*moveSpeed
如果event.type==KEYUP:
如果event.key==K_LEFT或event.key==K_a或event.key==K_RIGHT或event.key==K_d:
moveX=0
如果event.key==K_DOWN或event.key==K_s或event.key==K_UP或event.key==K_w:
moveY=0
dontMoveX=0
dontMoveY=0
对于对象中的obj:
如果playerX+moveX>obj[0]-user.get_width()和playerX+moveXobj[2]-user.get_height()和playerY+moveYobj[0]-user.get_width()和playerX+moveXobj[2]-user.get_height()和playerY+moveY=0且playerX=lowerX-(windowX/2)且playerX windowX/2且playerX=0且playerY=lowerY-(windowY/2)且playerY windowY/2且playerY
我有一个退出事件、一个用户事件、4个按键向下事件和2个按键向上事件。我还有一行代码可以闪烁背景,还有一个函数可以闪烁图像(应该在背景上闪烁,但不是因为顺序)。我用我的用户事件处理程序调用该函数。我尝试了以下顺序:while循环,for循环(退出事件,4个按键关闭事件,2个按键打开事件),blit,for循环(用户事件)。我会编辑帖子并向你展示。这听起来有点迂回。你为什么不发布你所做的事情,看看有没有人能指出更好的解决方案?用完整的代码编辑。我是新来的,所以我可能还有很多其他问题。
uif = "images/userGray.png"
bif = "images/bg.jpg"
cif = "images/chair3.png"
i = 0
playerX = 1
playerY = 1
pX = 1
pY = 1
bX = 0
bY = 0
moveX = 0
moveY = 0
windowX = 640
windowY = 480
lowerY = 1024
lowerX = 1024
bullets = []
x = 0
y = 0
rotate = False

objects = []

objects.append([256,260,410,511])

import pygame, sys
from pygame.locals import *

pygame.init()

screen = pygame.display.set_mode((640,480),0,32)

background = pygame.image.load(bif).convert()
user = pygame.image.load(uif).convert_alpha()
chair = pygame.image.load(cif).convert_alpha()
chair1 = pygame.image.load(cif).convert_alpha()

pygame.time.set_timer(USEREVENT + 1, 100)

def shoot(inLoc, clLoc, weapon):
    bulletId = len(bullets)
    bullets[bulletId] = [inLoc, clLoc, 200, 3]

moveSpeed = .1

while True:



    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == USEREVENT + 1:
            rotate = True;
        if event.type == KEYDOWN:
            if event.key == K_LEFT or event.key == K_a:
                moveX = -1*moveSpeed
            elif event.key == K_RIGHT or event.key == K_d:
                moveX = moveSpeed
            if event.key == K_DOWN or event.key == K_s:
                moveY = moveSpeed
            elif event.key == K_UP or event.key == K_w:
                moveY = -1*moveSpeed
        if event.type == KEYUP:
            if event.key == K_LEFT or event.key == K_a or event.key == K_RIGHT or event.key == K_d:
                moveX = 0
            if event.key == K_DOWN or event.key == K_s or event.key == K_UP or event.key == K_w:
                moveY = 0

    dontMoveX = 0
    dontMoveY = 0

    for obj in objects:

        if playerX + moveX > obj[0]-user.get_width() and playerX + moveX < obj[1] and playerY + moveY > obj[2]-user.get_height() and playerY + moveY < obj[3]:
            if playerY + moveY == obj[2]-user.get_height()-1 or playerY + moveY == obj[3]+1:
                dontMoveX = 0
            else:
                dontMoveX = 1

        if playerX + moveX > obj[0]-user.get_width() and playerX + moveX < obj[1] and playerY + moveY > obj[2]-user.get_height() and playerY + moveY < obj[3]:
            if playerX + moveX == obj[0]-user.get_width()-1 or playerX + moveX == obj[1]+1:
                dontMoveY = 0
            else:
                dontMoveY = 1

    if dontMoveX == 0:
        playerX += moveX

        if (playerX >= 0 and playerX <= windowX/2) or (playerX >= lowerX-(windowX/2) and playerX <= lowerX-user.get_width()):
            pX+=moveX
        if playerX > windowX/2 and playerX < lowerX-(windowX/2):
            bX+=-1*moveX

    if dontMoveY == 0:
        playerY += moveY

        if (playerY >= 0 and playerY <= windowY/2) or (playerY >= lowerY-(windowY/2) and playerY <= lowerY-user.get_width()):
            pY+=moveY
        if playerY > windowY/2 and playerY < lowerY-(windowY/2):
            bY+=-1*moveY

    screen.blit(background,(bX,bY))



    screen.blit(user,(pX,pY))


    pygame.mouse.set_visible(False);

    if rotate == True:    

        if i < 360:
            i = i + 18
        else:
            i = 0

        orig_chair_rect = chair.get_rect()
        chair1 = pygame.transform.rotate(chair, i);
        rot_chair_rect = orig_chair_rect.copy()
        rot_chair_rect.center = chair1.get_rect().center
        chair1 = chair1.subsurface(rot_chair_rect).copy()

        rotate = False

    x,y = pygame.mouse.get_pos()
    x -= chair.get_width()/2
    y -= chair.get_height()/2

    screen.blit(chair1,(x,y))

    pygame.display.update()