pygame 条件自动重复声音
pygame repeat sound on condition automatically
请原谅我的笨拙,但我在使用 pygame 时遇到了一些问题,我真的需要一些帮助!
我正在寻找一种太阳系模拟,其中每颗行星从一组预定义的坐标经过时将在每个轨道上产生一个简单的音符(一秒长,不再多)
到目前为止,我的视觉效果完全符合我的要求,但我无法让声音重复。只在开头播放一次,即使一次又一次满足条件也不会重复。
我正在使用 if
条件,并尝试在其上添加 while
条件以使其重复,但如果我这样做,它就会崩溃。
这是我的代码
planet1_sound = mixer.Sound('f-major.wav')
class PlanetMove:
def planetX(planet_orbit, distance, X):
x = math.cos(planet_orbit) * distance + X
return x
def planetY(planet_orbit, distance, Y):
y = -math.sin(planet_orbit) * distance + Y
return y
def tone(sound):
sound.play(0)
X1 = PlanetMove.planetX(planet1_orbit, distance1, defaultX)
Y1 = PlanetMove.planetY(planet1_orbit, distance1, defaultY)
if X1 == 715 and Y1 == 360:
PlanetMove.tone(planet1_sound)
和here是整个脚本
这让我发疯,任何见解都将不胜感激,谢谢!
X1
和 Y1
是浮点数。坐标一开始是 (715, 360),但它们永远不会再精确到 (715, 360)。您不能使用 ==
运算符来测试浮点数是否几乎相等。
你可以尝试round
碰撞测试的坐标为整数:
if round(X1) == 715 and round(Y1) == 360:
PlanetMove.tone(planet1_sound)
但是,这可能还不够。你必须测试这个星球是否在某个区域。使用 pygame.Rect.collidepoint
进行碰撞测试。例如:
if pygame.Rect(710, 355, 10, 10).collidepoint(X1, Y1):
PlanetMove.tone(planet1_sound)
一般来说,当您的代码中存在错误时,请在代码的不同部分放置点:
print("point1")
lines of codes ...
print("point2")
lines of codes ...
print("point3")
lines of codes ...
print("point4")
lines of codes ...
然后,当您的代码崩溃时,您可以看到输出并查看最后打印了哪个“点”。这样你就可以找出你的代码的哪一部分有问题。这种方法可以帮助您逐步找到代码中的错误。
请原谅我的笨拙,但我在使用 pygame 时遇到了一些问题,我真的需要一些帮助!
我正在寻找一种太阳系模拟,其中每颗行星从一组预定义的坐标经过时将在每个轨道上产生一个简单的音符(一秒长,不再多)
到目前为止,我的视觉效果完全符合我的要求,但我无法让声音重复。只在开头播放一次,即使一次又一次满足条件也不会重复。
我正在使用 if
条件,并尝试在其上添加 while
条件以使其重复,但如果我这样做,它就会崩溃。
这是我的代码
planet1_sound = mixer.Sound('f-major.wav')
class PlanetMove:
def planetX(planet_orbit, distance, X):
x = math.cos(planet_orbit) * distance + X
return x
def planetY(planet_orbit, distance, Y):
y = -math.sin(planet_orbit) * distance + Y
return y
def tone(sound):
sound.play(0)
X1 = PlanetMove.planetX(planet1_orbit, distance1, defaultX)
Y1 = PlanetMove.planetY(planet1_orbit, distance1, defaultY)
if X1 == 715 and Y1 == 360:
PlanetMove.tone(planet1_sound)
和here是整个脚本
这让我发疯,任何见解都将不胜感激,谢谢!
X1
和 Y1
是浮点数。坐标一开始是 (715, 360),但它们永远不会再精确到 (715, 360)。您不能使用 ==
运算符来测试浮点数是否几乎相等。
你可以尝试round
碰撞测试的坐标为整数:
if round(X1) == 715 and round(Y1) == 360:
PlanetMove.tone(planet1_sound)
但是,这可能还不够。你必须测试这个星球是否在某个区域。使用 pygame.Rect.collidepoint
进行碰撞测试。例如:
if pygame.Rect(710, 355, 10, 10).collidepoint(X1, Y1):
PlanetMove.tone(planet1_sound)
一般来说,当您的代码中存在错误时,请在代码的不同部分放置点:
print("point1")
lines of codes ...
print("point2")
lines of codes ...
print("point3")
lines of codes ...
print("point4")
lines of codes ...
然后,当您的代码崩溃时,您可以看到输出并查看最后打印了哪个“点”。这样你就可以找出你的代码的哪一部分有问题。这种方法可以帮助您逐步找到代码中的错误。