Pygame的鼠标点击检测Pygame的鼠标点击检测(Pygame mouse clicking d

2019-05-17 15:42发布

我不知道如何编写代码,将检测在精灵的鼠标点击。 例如:

if #Function that checks for mouse clicked on Sprite:
    print ("You have opened a chest!")

Answer 1:

我假设你的游戏有一个主循环,和所有的精灵都在一个叫做名单sprites

在你的主循环,得到所有的事件,并检查MOUSEBUTTONDOWNMOUSEBUTTONUP事件。

while ... # your main loop
  # get all events
  ev = pygame.event.get()

  # proceed events
  for event in ev:

    # handle MOUSEBUTTONUP
    if event.type == pygame.MOUSEBUTTONUP:
      pos = pygame.mouse.get_pos()

      # get a list of all sprites that are under the mouse cursor
      clicked_sprites = [s for s in sprites if s.rect.collidepoint(pos)]
      # do something with the clicked sprites...

所以基本上,你必须检查在精灵自己的主循环的每次迭代点击。 你要使用mouse.get_pos()和rect.collidepoint() 。

Pygame中不提供事件驱动编程,因为如cocos2d的一样。

另一种方法是检查鼠标光标和按下按钮的状态的位置,但这种方法有一些问题。

if pygame.mouse.get_pressed()[0] and mysprite.rect.collidepoint(pygame.mouse.get_pos()):
  print ("You have opened a chest!")

你必须引进一些种类标志,如果你处理这种情况下,否则这段代码将打印“您已打开了胸部!” 主循环的每一次迭代。

handled = False

while ... // your loop

  if pygame.mouse.get_pressed()[0] and mysprite.rect.collidepoint(pygame.mouse.get_pos()) and not handled:
    print ("You have opened a chest!")
    handled = pygame.mouse.get_pressed()[0]

当然,你也可以继承Sprite ,添加一个名为方法is_clicked是这样的:

class MySprite(Sprite):
  ...

  def is_clicked(self):
    return pygame.mouse.get_pressed()[0] and self.rect.collidepoint(pygame.mouse.get_pos())

所以,最好是使用第一种方法恕我直言。



Answer 2:

鼠标事件Pygame的文档是在这里 。 您可以使用pygame.mouse.get_pressed协同方法pygame.mouse.get_pos (如果需要)。 但请通过主事件循环使用鼠标点击事件。 之所以事件循环最好是由于“短点击”。 你可能不会注意到这些正常的机器,但上的触控板使用自来水,点击电脑有过小点击时期。 使用鼠标事件将防止这一点。

编辑:要执行像素完美碰撞使用pygame.sprite.collide_rect()上找到自己的文档的精灵 。



Answer 3:

我一直在寻找同样的回答这个问题和许多挠头这之后,我想出了答案:

#Python 3.4.3 with Pygame
import pygame

pygame.init()
pygame.display.set_caption('Crash!')
window = pygame.display.set_mode((300, 300))
running = True

# Draw Once
Rectplace = pygame.draw.rect(window, (255, 0, 0),(100, 100, 100, 100))
pygame.display.update()
# Main Loop
while running:
    # Mouse position and button clicking.
    pos = pygame.mouse.get_pos()
    pressed1, pressed2, pressed3 = pygame.mouse.get_pressed()
    # Check if the rect collided with the mouse pos
    # and if the left mouse button was pressed.
    if Rectplace.collidepoint(pos) and pressed1:
        print("You have opened a chest!")
    # Quit pygame.
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False


文章来源: Pygame mouse clicking detection