gpt4 book ai didi

python - 事件后pygame

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:08 25 4
gpt4 key购买 nike

有人可以帮我看看 pygame.event.post() 函数是如何工作的吗?我的代码如下所示:

class Game(object):
def __init__(self):
# importing pygame and creating display
def main(self):
class fire_events(object):
def __iter__(self):
return self
def next(self):
return pygame.event.wait()
# Main loop
for event in fire_events():
print "a"
# DO SOME STUFF
def post_my_event(self)
#pygame.event.post doesnt work - it complains pygame.error: video system not initialized

所以基本上我只想创建我的应用程序,让它在主循环中运行,然后从外部代码发布一个事件并让 pygame 对其使用react。

最佳答案

您不能神奇地将应用程序外部Event放入pygames事件队列。

如果你想做这样的事情,你必须使用某种 IPC 或网络。

例如,一种简单的方法是使用 UDP。

这个类会响应UDP消息并将事件放入pygame的事件队列中:

import socket
import pygame

pygame.init()

class UdpToPygame():

def __init__(self):
UDP_IP="127.0.0.1"
UDP_PORT=15006
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.sock.setblocking(0)
self.sock.bind((UDP_IP,UDP_PORT))

def update(self):
try:
data, addr = self.sock.recvfrom(1024)
ev = pygame.event.Event(pygame.USEREVENT, {'data': data, 'addr': addr})
pygame.event.post(ev)
except socket.error:
pass

在您的 pygame 应用程序中,您将创建该类的实例并在主循环中调用 update 方法。

响应自定义事件 UdpToPygame 的示例应用程序将放入队列中:

def main():
dispatcher = UdpToPygame()
screen = pygame.display.set_mode((800, 600))
l = 0
r = True
while r:
for ev in pygame.event.get():
if ev.type == pygame.QUIT:
r = False
if ev.type == pygame.USEREVENT:
t = pygame.font.SysFont('', 40).render(ev.data, True, (255,255,255))
screen.blit(t, (0, l*20))
l += 1
dispatcher.update()
pygame.display.flip()

if __name__ == "__main__":
main()

运行它并启动一个 python 解释器将文本直接发送到您正在运行的 pygame 应用程序:

>>> import socket
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> while True:
... sock.sendto(raw_input(), ("127.0.0.1", 15006))
...
hallo
5
pygame....
10

编辑:

至于你的错误pygame.error: video system not initialized:

确保您使用 pygame.init() 初始化了 pygame。

关于python - 事件后pygame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11361973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com