gpt4 book ai didi

python - 为雷达上的信号播放声音

转载 作者:太空宇宙 更新时间:2023-11-04 05:07:13 26 4
gpt4 key购买 nike

我有一个圆形雷达。雷达的“ ARM ”以恒定速度旋转。我需要雷达上的光点在它们经过时播放声音。

我该如何着手解决这个问题,以确保每次革命都能成功?

(使用pygame)

我试过使用 if 语句来判断“ ARM ”的 (x, y) 坐标和 blip 是否相等。但是我没有获得一致的成功。我还尝试进行斜率测量和余弦测量,并检查它们在 ARM 和光点之间是否相等;我并没有实时获得一致的成功,当有命中时,通常会有两个在圆上 cos 相同的位置进行。因为 ARM 比 blips 的位置精确到更多的小数位,所以我似乎很难用 if 语句很好地捕捉到。我不知道还有什么办法可以解决这个问题。任何想法将不胜感激!

janky radar

代码片段:

import pygame
from pygame.locals import *
import math

SIZE = 800, 800

screen = pygame.display.set_mode(SIZE, pygame.HWSURFACE | pygame.DOUBLEBUF)
done = False
bpm = 180 # based on a metronome to easily modulate speed
bbpm = 4
spm = bbpm*60/bpm
turnsPerMs = 1/(1000*spm)
startTime = pygame.time.get_ticks()
color = Color("red")
CENTER = (400,400)
RADIUS = 200
lineLen = 100
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 200)
BACKGROUND = (218, 226, 235)


pygame.init()

class Blip:
def __init__(self):
self.mouse = (0, 0)
self.vector = (self.mouse[0] - CENTER[0], self.mouse[1] - CENTER[1])
self.distance = math.sqrt(self.vector[0] ** 2 + self.vector[1] ** 2)
self.scalar = RADIUS / self.distance
self.lineend = (int(round(CENTER[0] + self.vector[0] * self.scalar)), int(round(CENTER[1] + self.vector[1] * self.scalar)))
self.radius = 20
self.position = (self.lineend[0] - self.radius, self.lineend[0] + self.radius, self.lineend[1] - self.radius,
self.lineend[1] + self.radius)
self.o = 255
self.s = 200
self.t = 150

"""def load_sound(self, filename):
print(filename)
self.sound = pygame.mixer.music.load(filename)"""

def play_sound(self):
print("Blip!")

def draw_blip(self):
pygame.draw.circle(screen, (100, 150, 200), self.lineend, self.radius)

class TickArm:
def __init__(self):
self.timeDelta = 0
self.revDelta = 0
self.deltaRadian = 0
self.x = SIZE[0]/2
self.y = SIZE[1]/2

def draw_tickarm(self):
self.timeDelta = pygame.time.get_ticks() - startTime
self.revDelta = self.timeDelta*turnsPerMs;
self.deltaRadian = self.revDelta*2*math.pi;
self.x = CENTER[0] + math.cos(self.deltaRadian) * RADIUS
self.y = CENTER[1] + math.sin(self.deltaRadian) * RADIUS

# then render the line ->(x,y)
pygame.draw.line(screen, color, CENTER, (self.x,self.y), 1)

tickarm = TickArm()
blip = Blip()

while not done:
for e in pygame.event.get():
if e.type == QUIT or (e.type == KEYDOWN and e.key == K_ESCAPE):
done = True
break

screen.fill((BACKGROUND))
pygame.draw.circle(screen, color, CENTER, RADIUS, 2)
pygame.draw.circle(screen, color, CENTER, RADIUS-25, 2)
blip.draw_blip()
tickarm.draw_tickarm()
pygame.display.flip()

最佳答案

没有足够的代表发表评论。对不起!但你可以试试这个:

screen.get_at(x,y)

如何去:将所有 blip 的中心存储在元组 center_lists 中

for i in center_lists:
if screen.get_at(i) == green:
#play the sound

您要做的是检查每一帧上所有光点的中心颜色。如果它们是绿色的,您可以播放声音。您甚至可以进一步创建另一个元组,该元组对不同类型的 blips 具有不同的声音,并使用迭代器计数 i 播放相应的声音。

关于python - 为雷达上的信号播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44090007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com