2016-05-03 23 views
0

私はユーザーが矩形をクリックしたかどうかを確認するためにpygameプログラムを作成しようとしています。その場合、その矩形の色を変更します。このpygameプログラムで各四角形のマウスクリックが長方形内にあるかどうかを確認するにはどうすればよいですか?

ここで画面を描画するために私の最初のコードだ:

import pygame 
import sys 

pygame.init() 

size_x = 650 
size_y = 550 
bkg_colour = 0, 0, 0 
white = 255, 255, 255 
colour = 0, 130, 90 
position_x, position_y = 70, 100 
screen = pygame.display.set_mode((size_x, size_y)) 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      sys.exit() 

     screen.fill(bkg_colour) 

     for x in range(-50, 500, position_x + 20): 
      for y in range(-50, 400, position_y + 20): 
       pygame.draw.rect(screen, colour, (position_x + x, position_y + y, position_x, position_y), 0) 

     pygame.display.flip() 

私は何をやってみましたがpygame.Rectを使用して、このようなcollisionpointた:

for x in range(-50, 500, position_x + 20): 
      for y in range(-50, 400, position_y + 20): 
       rect_size = pygame.Rect(position_x + x, position_y + y, position_x, position_y) 
       pygame.draw.rect(screen, colour, rect_size, 0) 

if event.type == pygame.MOUSEBUTTONDOWN: 
      click = rect_size.collidepoint(pygame.mouse.get_pos()) 

      if click == 1: 
       print("Clicked") 
       pygame.draw.rect(screen, white, rect_size, 0) 

pygame.display.flip() 

しかしそれがないことだけのために働くれます最後に描画された矩形を画面に表示します。 画面上のすべての矩形に対してどのように機能させるには?

答えて

0

rect_sizeは、一度に1つの値を保持し、最後の矩形を保持するまで何度も何度も上書きします。

あなたは四角形のリストを保持し、それらのすべてとの衝突をチェックしたいと考えています。

rect_sizes.append(pygame.Rect(position_x + x, position_y + y, position_x, position_y)) 

、その後rect_sizesを反復処理し、各1との衝突をチェックしてください。代わりに

rect_size = pygame.Rect(position_x + x, position_y + y, position_x, position_y) 

はあなたのような何かをしたいです。

rect_sizes = [] 
for x in range(-50, 500, position_x + 20): 
    for y in range(-50, 400, position_y + 20): 
     rect_size = pygame.Rect(position_x + x, position_y + y, position_x, position_y) 
     pygame.draw.rect(screen, colour, rect_size, 0) 
     rect_sizes.append(rect_size) 

if event.type == pygame.MOUSEBUTTONDOWN: 
    for rect_size in rect_sizes: 
     click = rect_size.collidepoint(pygame.mouse.get_pos()) 

     if click == 1: 
      print("Clicked") 
      pygame.draw.rect(screen, white, rect_size, 0) 
関連する問題