📜  如何在 Pygame 中添加自定义事件?

📅  最后修改于: 2022-05-13 01:55:05.720000             🧑  作者: Mango

如何在 Pygame 中添加自定义事件?

在本文中,我们将看到如何在 PyGame 中添加自定义事件。

安装

可以使用以下命令安装 PyGame 库:

pip install pygame

尽管 PyGame 带有一组事件(例如:KEYDOWN 和 KEYUP),但它允许我们创建自己的附加自定义事件 根据我们游戏的要求。自定义事件增加了我们对游戏的控制和灵活性。自定义事件与创建用户定义事件相同。

句法:

例子:

现在,我们如何在创建自定义事件后发布它们?这可以通过两种方式完成:

  • 使用pygame.event.post()方法。
  • 使用pygame.time.set_timer()方法。

使用 pygame.event.post() 方法

我们可以使用pygame.event.post()方法直接发布我们的事件。此方法将我们的事件添加到队列中事件的末尾。为了执行这个,我们需要将我们的事件转换为 Pygame 的事件类型,以便匹配 post 方法的属性并避免错误。

句法:

使用 pygame.time.set_timer() 方法

使用 PyGame 计时器定期广播事件。在这里,我们将使用另一种方法通过set_timer()函数发布事件,该函数采用两个参数,用户事件名称和时间间隔(以毫秒为单位)。

句法:

注意:在这里,我们不需要将用户定义的事件转换为 PyGame 事件数据类型。

现在首先创建一个带有自定义事件的图,屏幕的属性应该根据要求设置。然后创建一个事件并将其转换为 PyGame 事件数据类型。现在为您的操作添加将生成自定义事件的代码。

在给定的实现中,两种方法都得到了处理。



程序 :

Python3
# Python program to add Custom Events
import pygame
  
  
pygame.init()
  
# Setting up the screen and timer
screen = pygame.display.set_mode((500, 500))
timer = pygame.time.Clock()
  
# set title
pygame.display.set_caption('Custom Events')
  
# defining colours
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
  
# Keep a track of active variable
bg_active_color = WHITE
screen.fill(WHITE)
  
# custom user event to change color
CHANGE_COLOR = pygame.USEREVENT + 1
  
# custom user event to inflate defalte
# box
ON_BOX = pygame.USEREVENT + 2
  
# creating Rectangle
box = pygame.Rect((225, 225, 50, 50))
grow = True
  
# posting a event to switch color after 
# every 500ms
pygame.time.set_timer(CHANGE_COLOR, 500)
  
running = True
while running:
    
    # checks which all events are posted
    # and based on that perform required
    # operations
    for event in pygame.event.get():
        
        # switching colours after every
        # 500ms
        if event.type == CHANGE_COLOR:
            if bg_active_color == GREEN:
                screen.fill(GREEN)
                bg_active_color = WHITE
            elif bg_active_color == WHITE:
                screen.fill(WHITE)
                bg_active_color = GREEN
  
        if event.type == ON_BOX:
            
            # to inflate and deflate box
            if grow:
                box.inflate_ip(3, 3)
                grow = box.width < 75
            else:
                box.inflate_ip(-3, -3)
                grow = box.width < 50
  
        if event.type == pygame.QUIT:
            
            # for quitting the program
            running = False
  
    # Posting event when the cursor is on top 
    # of the box
    if box.collidepoint(pygame.mouse.get_pos()):
        pygame.event.post(pygame.event.Event(ON_BOX))
  
    # Drawing rectangle on the screen
    pygame.draw.rect(screen, RED, box)
  
    # Updating Screen
    pygame.display.update()
      
    # Setting Frames per Second
    timer.tick(30)
  
pygame.quit()


输出 :

在上面的实现中,我们使用.post()方法在光标位于框顶部时对框进行充气/放气,并使用.set_timer()方法在每 500 毫秒后切换背景颜色。