【问题标题】:How do I check to see if a mouse click is within a circle in pygame?如何检查鼠标点击是否在pygame的圆圈内?
【发布时间】:2015-07-02 04:54:46
【问题描述】:
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 的新手。

这是我的矩形:

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()

【问题讨论】:

  • 你能粘贴你的矩形代码吗?
  • 向我们展示您的矩形命中代码以及您对圆形的尝试。

标签: python python-2.7 pygame


【解决方案1】:

使用距离公式:

################################################################################
# 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()

################################################################################
################################################################################
################################################################################

【讨论】:

  • @RomanFormicola 实际上鼠标索引出错了。立即查看。
【解决方案2】:

你可以像这样对像素进行采样 detect click on shape pygame 否则使用 pythagoras 获取与中心的距离。

正如 Malik 所示,毕达哥拉斯适用于圆形,但对于一般的纯色形状,您可以这样做:

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

  if click == 1:
      print 'CLICKED!'

【讨论】:

    猜你喜欢
    • 2016-02-08
    • 2013-05-23
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2021-09-06
    相关资源
    最近更新 更多