Python 结果不同的相同代码

Python 结果不同的相同代码,python,python-3.x,pygame,user-controls,Python,Python 3.x,Pygame,User Controls,在我的游戏中,我有两个玩家控制的坦克。两个油箱的代码相同,但其中一个油箱更改了变量名。下面是两个油箱控制代码。运动控制工作正常,但动力不起作用。不知何故,无论哪一套坦克控制装置是第一套,它都是有效的。用户应使用“o”、“p”和“e”、“r”来更改电源,但使用第二组控制代码,即使使用按键线路,电源也将始终在更改,而不是在用户松开按键时保持不变 我看了一些堆栈溢出和youtube问题,但太高级了,我无法理解。 我还请我的朋友和老师来看看 keys=pygame.key.get_pressed() 如

在我的游戏中,我有两个玩家控制的坦克。两个油箱的代码相同,但其中一个油箱更改了变量名。下面是两个油箱控制代码。运动控制工作正常,但动力不起作用。不知何故,无论哪一套坦克控制装置是第一套,它都是有效的。用户应使用“o”、“p”和“e”、“r”来更改电源,但使用第二组控制代码,即使使用按键线路,电源也将始终在更改,而不是在用户松开按键时保持不变

我看了一些堆栈溢出和youtube问题,但太高级了,我无法理解。 我还请我的朋友和老师来看看

keys=pygame.key.get_pressed()
如果键[pygame.K_j]:
坦克1X-=坦克移动
elif keys[pygame.K_l]:
坦克1X+=坦克移动
elif keys[pygame.K_i]:
1=1
elif keys[pygame.kk]:
1=-1
elif keys[pygame.K_]:
火力1(炮1、坦克1X、坦克1Y、当前炮塔位置1、火力动力1)
elif keys[pygame.K_o]:
功率变化1=-1
elif keys[pygame.K_p]:
电源开关1=1
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
elif event.type==pygame.KEYUP:
如果event.key==pygame.K_i或event.key==pygame.K_K:
1=0
如果event.key==pygame.K_o或event.key==pygame.K_p:
功率变化1=0
当前炮塔位置1+=更改炮塔1
如果当前位置1>9:
当前位置1=9
elif当前位置1<0:
当前位置1=0
点火电源1+=电源开关1
如果fire_power1>100:
消防动力1=100
elif消防电源1<1:
消防动力1=1
信息(“电源:+str(消防电源1)+%”,黑色,850100)
如果键[pygame.K_a]:
坦克X-=坦克移动
elif keys[pygame.K_d]:
坦克X+=坦克移动
elif keys[pygame.K_w]:
更改炮塔=1
elif keys[pygame.K_s]:
ChangeTotalta=-1
elif keys[pygame.K_q]:
火力(火炮、坦克X、坦克Y、炮塔位置、火力)
elif keys[pygame.K_e]:
功率变化=-1
elif keys[pygame.K_r]:
功率变化=1
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
elif event.type==pygame.KEYUP:
如果event.key==pygame.K_w或event.key==pygame.K_s:
更改炮塔=0
如果event.key==pygame.K_e或event.key==pygame.K_r:
功率变化=0
当前转台位置+=更换转台
如果当前位置>9:
当前位置=9
elif当前位置<0:
当前位置=0
点火功率+=功率变化
如果消防电源>100:
消防功率=100
elif消防电源<1:
消防电源=1
信息(“电源:+str(消防电源)+%”,黑色,0100)

用户应使用“e”、“r”和“o”、“p”来更改电源,当他们松开钥匙时,电源不会更改,而是保持在电源水平。

问题在于原因,因为您有两个事件循环。所有事件都在第一个循环中处理,但键
pygame.K_w
pygame.K_s
pygame.K_e
pygame.K_r
不在第一个事件循环中处理。第二个事件循环根本不会获得任何事件(大部分)。
在一个游戏循环中实现一个事件循环

当由或处理时,将评估由返回的状态。
在事件循环后调用pygame.key.get_pressed():

#唯一的事件循环
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
elif event.type==pygame.KEYUP:
如果event.key==pygame.K_i或event.key==pygame.K_K:
1=0
如果event.key==pygame.K_o或event.key==pygame.K_p:
功率变化1=0
如果event.key==pygame.K_w或event.key==pygame.K_s:
更改炮塔=0
如果event.key==pygame.K_e或event.key==pygame.K_r:
功率变化=0
#获取“pygame.event.get()”之后的密钥状态
keys=pygame.key.get_pressed()
如果键[pygame.K_j]:
坦克1X-=坦克移动
elif keys[pygame.K_l]:
坦克1X+=坦克移动
elif keys[pygame.K_i]:
1=1
elif keys[pygame.kk]:
1=-1
elif keys[pygame.K_]:
火力1(炮1、坦克1X、坦克1Y、当前炮塔位置1、火力动力1)
elif keys[pygame.K_o]:
功率变化1=-1
elif keys[pygame.K_p]:
电源开关1=1
当前炮塔位置1+=更改炮塔1
如果当前位置1>9:
当前位置1=9
elif当前位置1<0:
当前位置1=0
点火电源1+=电源开关1
如果fire_power1>100:
消防动力1=100
elif消防电源1<1:
消防动力1=1
信息(“电源:+str(消防电源1)+%”,黑色,850100)
如果键[pygame.K_a]:
坦克X-=坦克移动
elif keys[pygame.K_d]:
坦克X+=坦克移动
elif keys[pygame.K_w]:
更改炮塔=1
elif keys[pygame.K_s]:
ChangeTotalta=-1
elif keys[pygame.K_q]:
火力(火炮、坦克X、坦克Y、炮塔位置、火力)
elif keys[pygame.K_e]:
功率变化=-1
elif keys[pygame.K_r]:
功率变化=1
当前转台位置+=更换转台
如果当前位置>9:
当前位置=9
elif当前位置<0:
当前位置=0
点火功率+=功率变化
如果消防电源>100:
消防功率=100
elif消防电源<1:
消防电源=1
信息(“电源:+str(消防电源)+%”,黑色,0100)

问题在于原因,因为您有两个事件循环。所有事件都在第一个循环中处理,但键
pygame.K_w
pygame.K_s
pygame.K_e
pygame.K_r
不在第一个事件循环中处理。第二个事件循环根本不会获得任何事件(大部分)。
在一个游戏循环中实现一个事件循环

当由或处理时,将评估由返回的状态。
在事件循环后调用pygame.key.get_pressed():

#唯一的事件循环
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
pygame.quit()
elif event.type==pygame.KEYUP:
if event.k