2014-06-17 6 views
0

나는 보행자 차량과 충돌하지 않으려 고하는 자동차에 관한 게임을 만들고 있습니다. 적 (일명 pedestrian_cars 클래스)과 user_car (일명 플레이어 클래스)에 충돌을 추가하려고하는데 정확히 어디에서 (while 루프?)와 어떻게해야하는지 잘 모르겠습니다. 일부 변수는 나쁠 수도 있지만 나중에 해결할 것입니다.파이 게임에서 충돌을 추가하는 방법

내 프로그램 :

import pygame, random, math, sys 
from pygame.locals import * 


class Player(pygame.sprite.Sprite): 
    def __init__(self, starty): 
     pygame.sprite.Sprite.__init__(self) 
     # Images 
     self.aliveImage = pygame.image.load("playercar.png").convert_alpha() 
     #self.deadImage = pygame.image.load("data/PlayerExplode.png").convert_alpha() 
     self.image = self.aliveImage 
     self.rect = self.image.get_rect() 
     self.rect.x = 200 
     self.rect.y = starty - self.rect.height 
     self.speed = 7 
     self.dead = False 


    # Explode if you get hit, lose a life 
    def explode(self): 
     if not self.dead: 
      self.dead = True 
      self.image = self.deadImage 
      pygame.mixer.stop() 
      self.channel = self.explodeSound.play() 
      game.playerShots.empty() 
      game.enemyShots.empty() 
      game.wave.mship.empty() 
      game.lives.update(-1) 


class pedestrian_cars(pygame.sprite.Sprite): 
    def __init__(self, starty,startx): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = pygame.image.load("pedcar.png").convert_alpha() 
     self.rect = self.image.get_rect() 
     self.rect.y = starty - self.rect.height 
     self.rect.x = startx - self.rect.width 
     self.delta_y = 5 # 5 
     self.gravity = .5 #.5 
     self.has_spawned = False 

    def update(self): 
     self.rect.y += self.delta_y 

    def spawn(self): 
     if self.rect.y == 480 or self.has_spawned == False: 
      self.has_spawned = True 
      self.rect.x = random.randint(60,300) 
      self.rect.y = -10 


def main(): 
    """ Set up the game and run the main game loop """ 
    pygame.mixer.pre_init(44100, -16, 2, 2048) 
    pygame.init() # prepare the pygame module for use 
    surfaceSz = 480 # Desired physical surface size, in pixels. 
    # Create surface of (width, height), and its window. 
    main_surface = pygame.display.set_mode((surfaceSz, surfaceSz)) 

    #SPRITES############################################################### 
    user_car = Player(450) 
    enemy = pedestrian_cars(10,200) 
    #SPRITES################################################################ 
    background_image = pygame.image.load("background2.png") 

    all_sprites = pygame.sprite.Group() 



    user_car.add(all_sprites) 
    enemy.add(all_sprites) 

    clock = pygame.time.Clock() 

    b1 = "background2.png" 
    back = pygame.image.load(b1).convert() 
    back2 = pygame.image.load(b1).convert() 
    y = 0 
    screenWidth = 600 
    screenHeight = 480 

#Sound/Music##################################### 
    pygame.mixer.music.load("stilldre.wav") 
    pygame.mixer.music.play(-1) 
#-################################################ 


    while True: 
     ev = pygame.event.poll() # look for any event 
     if ev.type == pygame.QUIT: # window close button clicked? 
      break # ... leave game loop 
      sys.exit() 

     if not user_car.dead: 
      # Move the player 
      keys = pygame.key.get_pressed() 
      if keys[pygame.K_LEFT]: 
       user_car.rect.x = max(user_car.rect.x - user_car.speed, 116-user_car.rect.width) 
      elif keys[pygame.K_RIGHT]: 
       user_car.rect.x = min(user_car.rect.x + user_car.speed, 395-user_car.rect.width) 

     else: 
      # Go back to playing after the explosion sound finishes 
      if not self.channel.get_busy(): 
       self.image = self.aliveImage 
       self.dead = False 
       self.rect.x = 200 


     # Update your game objects and data structures here... 

     all_sprites.update() 
     enemy.spawn() 

     main_surface.fill((0,200,255)) 
     main_surface.blit(background_image, (0, 0)) 

     main_surface.blit(back, (0,y)) 
     main_surface.blit(back2,(0,y-screenHeight)) 

     y = y + 8 
     if y == screenWidth: 
      y = 0 

##  if enemy.alive.x == 
##  msElapsed = clock.tick(100) 
##  pygame.display.flip() 


     all_sprites.draw(main_surface) 


     # Now the surface is ready, tell pygame to display it! 
     pygame.display.flip() 
     clock.tick(200) 
     msElapsed = clock.tick(100) 

    pygame.quit() # once we leave the loop, close the window. 

main() 

답변

1

의 오브젝트의의 구형이 colliderect과 겹치는 경우 당신은 간단하게 확인할 수 있습니다

while True: 

    ... 
    if user_car.rect.colliderect(enemy.rect): 
     do_something() 
    ...