2016-10-08 17 views
1

私は2Dゲームを設計している私の学校プロジェクトに取り組んでいます。Pygame:2つの画像の衝突

私は3つのイメージを持っています.1つはプレイヤーで、もう1つはインスタンスです(コーヒーとコンピュータ)。私がしたいことは、プレーヤーの画像が2つのインスタンスのうちの1つと衝突したときに、プログラムが何かを印刷したいと思うことです。

イメージの衝突が可能かどうかは確信しています。しかし、私は直腸の衝突が可能であることを知っています。しかし、いくつかの失敗した試みの後で、私は自分のイメージを矩形にすることはできません。誰か助けてください。私のソースコードは次のとおりです。

import pygame 
import os 

black=(0,0,0) 
white=(255,255,255) 
blue=(0,0,255) 


class Player(object): 
    def __init__(self): 
     self.image = pygame.image.load("player1.png") 
     self.image2 = pygame.transform.flip(self.image, True, False) 
     self.coffee=pygame.image.load("coffee.png") 
     self.computer=pygame.image.load("computer.png") 
     self.flipped = False 
     self.x = 0 
     self.y = 0 


    def handle_keys(self): 
     """ Movement keys """ 
     key = pygame.key.get_pressed() 
     dist = 5 
     if key[pygame.K_DOWN]: 
      self.y += dist 
     elif key[pygame.K_UP]: 
      self.y -= dist 
     if key[pygame.K_RIGHT]: 
      self.x += dist 
      self.flipped = False 
     elif key[pygame.K_LEFT]: 
      self.x -= dist 
      self.flipped = True 

    def draw(self, surface): 
     if self.flipped: 
      image = self.image2 
     else: 
      im = self.image    
     for x in range(0, 810, 10): 
      pygame.draw.rect(screen, black, [x, 0, 10, 10]) 
      pygame.draw.rect(screen, black, [x, 610, 10, 10]) 

     for x in range(0, 610, 10): 
      pygame.draw.rect(screen, black, [0, x, 10, 10]) 
      pygame.draw.rect(screen, black, [810, x, 10, 10]) 

     surface.blit(self.coffee, (725,500)) 
     surface.blit(self.computer,(15,500)) 
     surface.blit(im, (self.x, self.y)) 



pygame.init() 



screen = pygame.display.set_mode((800, 600))#creates the screen 

player = Player() 
clock = pygame.time.Clock() 

running = True 
while running: 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit()  # quit the screen 
      running = False 

    player.handle_keys()  # movement keys 
    screen.fill((255,255,255)) # fill the screen with white 




    player.draw(screen)  # draw the player to the screen 
    pygame.display.update() # update the screen 

    clock.tick(60)    # Limits Frames Per Second to 60 or less 

答えて

0

pygame.Rect()を使用してイメージのサイズと位置を保持します。

イメージ(またはむしろpygame.Surface())は、pygame.Rect()のイメージサイズ(および位置)を返す関数get_rect()を持っています。

self.rect = self.image.get_rect() 

ここで開始位置を設定できます。 (0, 0)

self.rect.x = 0 
self.rect.y = 0 

# or 

self.rect.topleft = (0, 0) 

# or 

self.rect = self.image.get_rect(x=0, y=0) 

Rect使用は(X、Y)として上隅を左)。

は位置

self.rect.x += dist 

を変更するには、それを使用して画像

surface.blit(self.image, self.rect) 

を描くようにして、あなたがところで衝突

if self.rect.colliderect(self.rect_coffe): 

をテストすることができますし、今class Playerはほぼ見えますのように:)

+0

私は変更を加えました。私はプレーヤーを直進させ、コーヒーも作りました。私はwhileループの前に衝突テストを置いて入れました self.rect.colliderect(self.rect_coffe): print "no" 私がプログラムを起動するとすぐに "no"が表示されます。 何が間違っていますか? – meowmar

+0

の 'key handle'の後で' draw'の前です。 – furas

+0

'rect_coffe'にcoffeの位置を設定しましたか? (x = 0、y = 0)。あなたは常に 'print(self.rect、self.rect_coffe)'を使って位置を見ることができます。 – furas