我正在使用pygame用于我的游戏及其在线但问题是每当游戏的主循环等待来自服务器的套接字时它就会冻结。 因此,除非你正在轮到你,否则客户端会等待来自服务器的套接字,并且在等待和冻结时它什么都不做,直到它获得套接字并轮到它。
所以我在这个网站和其他一些网站上阅读了几个答案和解决方案,并且在5秒钟后我无法理解操作系统认为窗口(锁定了自己)后我理解了什么?所以我创建了线程keep_run,但它没有做任何改变,窗口仍然冻结,而不是轮流。
另外提到服务器在选择库的情况下也可以使用它,因为keep_run()是我使用的唯一线程。
我的代码中没有包含很多行,因为它有太多但是它可能导致它的重要内容的基本结论?
import sockets
import pygame
from threading import Thread
def keep_run():
clock = pygame.time.Clock()
fps = 60
while True:
pygame.event.pump()
clock.tick(fps)
pygame.init()
keep_running = Thread(target=keep_run)
keep_running.setDaemon(True)
keep_running.start()
while Game_run:
#the main loop
server_command = client_socket.recv(1024)
if server_command == "move":
# make your turn
do_turn()
elif server_command == "over":
# finish the game
finish_game()
答案 0 :(得分:1)
您必须定期pygame.event.pump()
(pygame.event.get()
,pygame.event.clear()
,pygame.event.poll()
,pygame.event.wait()
或pygame.event.peek()
隐式调用pygame.event.pump()
{{ 3}}(Pygame是基于SDL构建的,因此是SDL文档的链接)。
我还建议您不要使用pygame.event.get()
,而是使用pygame.event.poll()
或<?php
include "koneksi.php";
$chkArry=array();
$query = "select * from mydata";
$result = mysql_query($query);
while($data = mysql_fetch_array($result)){
$dbasearray[] = $data['month_data'].",".$data['week_data'].",".$data['total_data'];
}
$s1 = array();
$s2 = array();
$a = array();
$b = array();
echo "<table border='1'>
<tr>
<th>Month</th>
<th>Week</th>
<th>Total</th>
<th>s1</th>
<th>s2</th>
<th>a</th>
<th>b</th>
</tr>
";
foreach ($dbasearray as $index => $datah){
$data = explode(",", $datah);
if(in_array($data[0], $chkArry)){
$data[0]='';
}
else
{
array_push($chkArry, $data[0]);
}
echo "<tr>";
echo "<td align='center'>".$data[0]."</td>";
echo "<td align='center'>".$data[1]."</td>";
echo "<td align='center'>".$data[2]."</td>";
if($index==0){
echo "<td>".$s1[$index] = $data[2]."</td>";
echo "<td>".$s2[$index] = $data[2]."</td>";
}
else {
echo "<td>".$s1[$index] = 0.1*$data[2]+0.9*$s1[$index-1]."</td>";
echo "<td>".$s2[$index] = 0.1*$s1[$index]+0.9*$s2[$index-1]."</td>";
}
echo "<td>".$a[$index] = 2*$s1[$index]-$s2[$index]."</td>";
echo "<td>".$b[$index] = (0.1/0.9)*($s1[$index]-$s2[$index])."</td>";
echo "</tr>";
}
echo "</table>";
?>
正确处理所有事件。有关此in the thread that initialized the video subsystem的更多信息。