Python 不知道为什么按键不起作用
按程序中的D键时,我很难做出反应。我会展示,然后解释。不相干的事情省略了 Main.pyPython 不知道为什么按键不起作用,python,pygame,Python,Pygame,按程序中的D键时,我很难做出反应。我会展示,然后解释。不相干的事情省略了 Main.py while True: process(Cursor,movie,music) Effects.List.draw(screen) pygame.display.flip() 类.py class BaseClass(pygame.sprite.Sprite): allsprites = pygame.sprite.Group() def __init__(sel
while True:
process(Cursor,movie,music)
Effects.List.draw(screen)
pygame.display.flip()
类.py
class BaseClass(pygame.sprite.Sprite):
allsprites = pygame.sprite.Group()
def __init__(self,x,y,image_string):
pygame.sprite.Sprite.__init__(self)
BaseClass.allsprites.add(self)
self.image = pygame.image.load(image_string)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
def destroy(self, ClassName):
ClassName.List.remove(self)
BaseClass.allsprites.remove(self)
del self
class Effects(BaseClass):
List = pygame.sprite.Group()
def __init__(self,x,y,image_string):
BaseClass.__init__(self,x,y,image_string)
Effects.List.add(self)
Process.py
def process(Cursor,movie,music):
for event in pygame.event.get():
Stage = True
Stage2 = False
keys = pygame.key.get_pressed()
if Stage:
if Cursor.rect.collidepoint(370,340): #Start
if keys[pygame.K_RETURN]:
Stage2 = True
if Stage2:
Stage = False
hitkeys = HitKeys(65,600,"Images/Hit Keys.png") #520
lane = KeyLane(50,0,"Images/4k lane.png")
movie.play()
pygame.mixer.music.play()
if keys[pygame.K_d]:
effect1 = Effects(55,0,"Images/Effect.png")
我在编程方面没有经验,所以实现我想要的东西的方法非常迂回。如您所见,我希望Effect.png在按下D键时显示,但仅在Stage2期间显示。这根本不会发生。如果我把它编成一个部分,它就会工作,但这意味着它会出现在舞台上。不是我想要的
如果您能帮我确定为什么它没有出现在Stage2中,我将不胜感激。在pygame.event.get中的for event中:您设置了
所以每次运行流程时,都会转到Stage=True
你必须把它设置好
Stage = True
Stage2 = False
在游戏开始前,while True:
顺便说一句:你必须使用Stage和Stage2
也许最好使用一个阶段并指定阶段编号1、2
顺便说一句:有python规则如何命名函数和变量-对于变量名stage、stage1、all_sprite使用小写和u,并且在类名中使用大写字母。事件堆栈使用该规则,它使用浅蓝色作为类名
编辑:
我制作了测试键盘的脚本。检查你得到了什么
keys=pygame.key.get_pressed工作,但仅当屏幕/窗口存在时
import pygame
import pygame.locals
pygame.init()
screen = pygame.display.set_mode((800,600))
d_pressed = False
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_d:
d_pressed = True
elif event.type == pygame.KEYUP:
if event.key == pygame.K_d:
d_pressed = False
keys = pygame.key.get_pressed()
if d_pressed:
print '> d_pressed <'
if keys[pygame.K_RETURN]:
print '> K_RETURN <'
if keys[pygame.K_d]:
print '> K_d <'
-
在某些地方添加打印-例如在if键之前和if键内部,以查看发生了什么。你可以打印效果。在一些地方列出,看看是否有预期的元素。如果你没有使用IDE,我也很幸运地完成了代码的单步执行。因此,我确实将stage和stage2的值放在了True之前:它没有立即解决问题。我把printMenu放在if stage:之后,把printGame放在if stage2:之后。当我运行程序时,shell会打印一堆游戏,没什么大不了的。但当我按enter键进入Stage2时,游戏只打印一次,然后菜单会反复打印。D也没有反应,打印出来,什么也没有出现。谢谢你的提示。我试着使用pygame.key.get_,但它不起作用。但什么都没发生我从来没用过它:。您仍然可以使用event.key获取D。我将后面的示例放在答案中。请参阅我的答案。您可以添加更多打印来测试keys[pygame.K_d]在不同时刻是否正确。为此,我发现问题在于stage和stage2的状态没有正确更改。因为当我试图用False覆盖stage时,它仍然返回True。外壳应该是垃圾游戏后,点击进入权?所以我想现在的主要问题是,当我进入第二阶段时,如何让程序忽略阶段中的所有内容。现在我看到了问题。使用processCursor、movie、music、stage、stage1 python只将变量stage、stage1`中的值发送到process,现在在process中,您有了名称相同的新局部变量stage、stage1。当脚本返回到while True时,就有了具有旧值的变量。您可以使用阶段列表将其发送到流程-请参阅答案中的新示例。
process(Cursor,movie,music, Stage, Stage2)
import pygame
import pygame.locals
pygame.init()
screen = pygame.display.set_mode((800,600))
d_pressed = False
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_d:
d_pressed = True
elif event.type == pygame.KEYUP:
if event.key == pygame.K_d:
d_pressed = False
keys = pygame.key.get_pressed()
if d_pressed:
print '> d_pressed <'
if keys[pygame.K_RETURN]:
print '> K_RETURN <'
if keys[pygame.K_d]:
print '> K_d <'
stages = [True, False]
while True:
process(Cursor, movie, music, stages)
Effects.List.draw(screen)
pygame.display.flip()
while True
def process(Cursor,movie,music, stages):
for event in pygame.event.get():
keys = pygame.key.get_pressed()
if stages[0]:
if Cursor.rect.collidepoint(370,340): #Start
if keys[pygame.K_RETURN]:
stages[0] = False
stages[1] = True
if stage[1]:
hitkeys = HitKeys(65,600,"Images/Hit Keys.png") #520
lane = KeyLane(50,0,"Images/4k lane.png")
movie.play()
pygame.mixer.music.play()
if keys[pygame.K_d]:
effect1 = Effects(55,0,"Images/Effect.png")