Python 3.x 将pygame keyDown事件与pygame混合器一起使用时出错
因此,我试图搞乱Python 3.x 将pygame keyDown事件与pygame混合器一起使用时出错,python-3.x,pygame,Python 3.x,Pygame,因此,我试图搞乱Pygame模块,我使用了Pygame.mixer和Pygame.key。但是,当我运行下面的代码块时,它会生成一个错误 import pygame, sys pygame.init() window = pygame.display.set_mode((600,400)) kick = pygame.mixer.Sound("kick.wav") clap = pygame.mixer.Sound("clap.wav") while True: for event
Pygame
模块,我使用了Pygame.mixer
和Pygame.key
。但是,当我运行下面的代码块时,它会生成一个错误
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()
代码:
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()
错误消息:
*** error for object 0x101008fd0: pointer being freed was not allocated
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()
任何帮助都会很好 我对您的代码进行了修改,结果成功了——LinuxMint、Python2.7.10
import pygame
pygame.init() # init all modules
window = pygame.display.set_mode((600,400)) # required by event
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
pygame.event.get() # required by get_pressed()
keyPressed = pygame.key.get_pressed()
if keyPressed[pygame.K_a]:
print "A"
pygame.mixer.Sound.play(kick)
if keyPressed[pygame.K_d]:
print "D"
pygame.mixer.Sound.play(clap)
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()
但是您可能会遇到不同的问题,我也帮不了您。代码不起作用的原因有很多,请参见下面我的
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()
首先,您必须为pygame创建一个要运行的显示窗口
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()
window = pygame.display.set_mode((600,400))
第二个,请注意,您正在为kick和clap变量指定一个声音对象。这些是具有play()方法的声音对象,可以使用点运算符引用该方法。这不是错误,只是有点不必要。阅读以查看声音和播放()参数。您可以简单地执行以下操作:
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()
kick.play()
最后,一种更为传统的事件处理方式
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
这是一个malloc“双重自由”错误
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()
看到这个错误,在浏览了很多网站后,他们基本上说了同样的话:
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()
当您在调试器中中断时,您将发现对象是什么。只需查找调用堆栈,就可以找到释放它的位置。这将告诉你它是哪个物体。
设置断点的最简单方法是:
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()
malloc\u error\u break
以上是链接中接受的答案。我认为您应该使用
pygame.init()
初始化所有模块。可能操作系统不会在没有窗口的情况下向程序发送(键)事件。@furas它仍然无法工作-即使实现了窗口。您仍然有相同的错误吗?get_pressed()
需要窗口,但它可能与错误无关。顺便说一句:get_pressed()
如果没有pygame.event.get()
,它将无法工作。我指定了Python3.x,但在2.7下运行它时,它对我有效。谢谢你的帮助。我知道,这些天人们都很刻薄:P不是我。似乎对我不起作用。。。谢谢你的帮助!
import pygame, sys
pygame.init()
window = pygame.display.set_mode((600,400))
kick = pygame.mixer.Sound("kick.wav")
clap = pygame.mixer.Sound("clap.wav")
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
kick.play()
if event.key == pygame.K_d:
clap.play()
if event.type == pygame.QUIT:
pygame.quit()
quit()