【发布时间】:2023-02-22 19:31:31
【问题描述】:
我有一个用于 PyGame 的 python 脚本,它在屏幕上移动一个多边形。一旦通过套接字收到消息“停止”,它就应该停止移动多边形。当前,整个 pyGame 脚本在收到停止消息时结束。我希望仍显示多边形的当前位置。
这是移动多边形的代码:
import pygame
import select
import socket
# Initialize pygame and create a window
pygame.init()
screen = pygame.display.set_mode((640, 480))
# Set up the socket connection
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('192.168.178.49', 5000))
server_socket.listen(1)
# Set up the triangle
triangle_pos = [0, 10]
triangle_speed = 1
# Initialize the stop_movement variable
stop_movement = False
# Start the main loop
exiting = False
while not exiting:
# Check for any incoming messages from the socket connection
inputs, _, _ = select.select([server_socket], [], [], 0.1)
for sock in inputs:
data = sock.recv(1024)
if data == b'stop':
stop_movement = True
else:
stop_movement = False
# Update the triangle position if it has not been stopped
if not stop_movement:
triangle_pos[0] += triangle_speed
if triangle_pos[0] > 640:
triangle_pos[0] = 0
# Draw the triangle
pygame.draw.polygon(screen, (255, 0, 0), [(triangle_pos[0], triangle_pos[1]), (triangle_pos[0]+5, triangle_pos[1]+10), (triangle_pos[0]-5, triangle_pos[1]+10)])
# Update the display
pygame.display.flip()
# Check for quit event
for event in pygame.event.get():
if event.type == pygame.QUIT:
exiting = True
# Quit Pygame
pygame.quit()
这是套接字另一端的发送者代码:
import socket
# Set up the socket connection
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('192.168.178.49', 5000))
# Send the "stop" message
client_socket.send(b'stop')
我究竟做错了什么?
先感谢您!
【问题讨论】:
-
当它通过套接字收到“停止”消息时,您正在退出循环并退出 Pygame。您需要修改代码以继续显示多边形的当前位置,即使收到“停止”消息也是如此。
-
@Michael 这当然不是这里发生的事情。问题是直接在套接字上调用
recv,而不是调用accept返回的连接。