2015-04-23 136 views
2
import pygame 

pygame.init() 

white = 255,255,255 
cyan = 0,255,255 

gameDisplay = pygame.display.set_mode((800,600)) 
pygame.display.set_caption('Circle Click Test') 

stop = False 

while not stop: 
    gameDisplay.fill(white) 

    pygame.draw.circle(gameDisplay,cyan,(400,300),(100)) 

    for event in pygame.event.get(): 

     if event.type == pygame.MOUSEBUTTONDOWN: 
      #################################################### 

     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 

    pygame.display.update() 

這裏我在屏幕上有一個圓圈,我想檢查用戶 是否在圓圈內點擊。我知道如何用矩形做到這一點,我會認爲它是相似的。感謝您的幫助,我對pygame很陌生。如何檢查pygame中的鼠標點擊是否在圓圈內?

這裏是我有矩形:

import pygame 

pygame.init() 

white = 255,255,255 
cyan = 0,255,255 

gameDisplay = pygame.display.set_mode((800,600)) 
pygame.display.set_caption('Circle Click Test') 

rectangle = pygame.Rect(400,300,200,200) 

stop = False 

while not stop: 
    gameDisplay.fill(white) 

    pygame.draw.rect(gameDisplay, cyan,rectangle,4) 

    for event in pygame.event.get(): 

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

      if click == 1: 
       print 'CLICKED!' 

     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 

    pygame.display.update() 
+0

可以粘貼您的矩形代碼? – arivero

+0

向我們展示您的矩形命中代碼以及您嘗試過的圈子。 – msw

回答

2

使用距離公式:

################################################################################ 
# Imports ###################################################################### 
################################################################################ 

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

################################################################################ 
# Screen Setup ################################################################# 
################################################################################ 

pygame.init() 
scr = pygame.display.set_mode((640, 480)) 
pygame.display.set_caption('Box Test') 

################################################################################ 
# Game Loop #################################################################### 
################################################################################ 

while True: 
    pygame.display.update(); scr.fill((200, 200, 255)) 
    pygame.draw.circle(scr, (0, 0, 0), (400, 300), 100) 

    x = pygame.mouse.get_pos()[0] 
    y = pygame.mouse.get_pos()[1] 

    sqx = (x - 400)**2 
    sqy = (y - 300)**2 

    if math.sqrt(sqx + sqy) < 100: 
     print 'inside' 

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

################################################################################ 
################################################################################ 
################################################################################ 
+0

謝謝,這表現很好 –

+0

@RomanFormicola我實際上在鼠標索引時發生了錯誤。現在看。 –

0

,你可以品嚐這樣 detect click on shape pygame 像素以其他方式使用畢達哥拉斯擺脫中心的距離。

由於馬利克表示,畢達哥拉斯行之有效的圈子,但是對於一般的純色形狀,你可以這樣做:

if event.type == pygame.MOUSEBUTTONDOWN: 
    click = gameDisplay.get_at(pygame.mouse.get_pos()) == cyan 

    if click == 1: 
     print 'CLICKED!' 
相關問題