проверить событие на полпути через цикл while? - PullRequest
0 голосов
/ 28 марта 2012

Таким образом, в pygame у вас есть цикл while, который непрерывно повторяется, затем ваши обработчики событий в цикле for, а затем код, который вы хотите выполнять непрерывно.

Мне нужно обработать событие после того, как я выполню строку кода внутри цикла while, поскольку они влияют друг на друга, но мне также нужно обработать другое событие перед строкой.

Как внутри моего основного цикла while обрабатывать набор событий, выполнять некоторый код, а затем обрабатывать другой набор событий?

1 Ответ

0 голосов
/ 28 марта 2012

Решено.

Я устанавливаю переменную, равную 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
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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...