2012-03-28 13 views
0

したがって、pygameではwhileループを連続して実行してから、forループでイベントハンドラを実行してから、続けて実行するコードを実行します。実行中のループの途中でイベントをチェックしますか?

whileループ内でコードの行を実行した後、イベントを処理する必要がありますが、それらはお互いに影響しますが、行の前に別のイベントを処理する必要もあります。

メインループの中で、一連のイベントを処理し、コードを実行して、別の一連のイベントを処理する方法はありますか?

+0

私が辞めイベント、ユーザイベント、4つのKeyDownイベント、および2からkeyupイベントがあります。私はまた、背景をblitし、画像をblitする関数(背景の上にblitすることになっているが、順序のせいではない)を持つコード行を持っている。私は私のユーザーイベントハンドラで関数を呼び出します。私は次の順序を試した:whileループ、forループ(終了イベント、4 keydownイベント、2 keyupイベント)、blit、forループ(ユーザイベント)。私は投稿を編集し、あなたを見せます。 – maxhud

答えて

0

解決済み。

ユーザーイベントハンドラで変数を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() 
+0

これはちょっと丸見えですね。あなたが行ったことを投稿し、誰かがより良い解決策を指摘できるかどうかを知りませんか? –

+0

完全なコードで編集しました。私は新しいので、おそらく他の問題もたくさんあります。 – maxhud

関連する問題