微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pygame:通过pygame.time.set_timer发送具有属性的自定义事件

如何解决pygame:通过pygame.time.set_timer发送具有属性的自定义事件

我在游戏中高亮显示。与此同时,我想设置一个计时器来触发自定义事件,该事件告诉主驱动程序在x毫秒后删除那些突出显示内容。像这样:

REMOVE_HIGHLIGHT_EVENT = p.USEREVENT + 1

coords = (3,5)  # the coordinates of the highlighted square

pygame.time.set_timer(p.event.Event(REMOVE_HIGHLIGHT_EVENT,square=coords).type,milliseconds=2000,once=True)

并在主循环中:

while running:
    for e in pygame.event.get():
        ...
        if e.type == REMOVE_HIGHLIGHT_EVENT:
                removeHighlight(e.square)

但是我得到AttributeError: 'Event' object has no attribute 'square'

因此,显然我无法以这种方式设置属性。我曾考虑过要对表示事件类型的整数中的坐标进行编码,但这对我来说似乎很不合逻辑。有没有更好的方法来传递这些信息?

谢谢。

解决方法

您误解了pygame.time.set_timer()的工作方式。指示

pygame.time.set_timer(p.event.Event(REMOVE_HIGHLIGHT_EVENT,square=coords).type,milliseconds=2000,once=True)

没有任何意义。实际上,您正在创建一个无处不在的临时事件对象。您正在尝试发明一种不存在的功能。

您不能将自定义pygame.event.Event()对象附加到计时器事件。 set_timer有2个参数,事件ID和时间,但没有其他参数。参见Timer in Pygame
发布客户事件的唯一方法是pygame.event.post()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。