首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在雷达上播放信号的声音

在雷达上播放信号的声音
EN

Stack Overflow用户
提问于 2017-05-21 03:27:05
回答 1查看 160关注 0票数 2

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

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

(使用pygame)

我已经尝试使用if语句来捕获"arm“的(x,y)坐标和这些光点是否相等。然而,我并没有得到持续的成功。我还尝试了斜率测量和余弦测量,并检查它们在手臂和光点之间是否相等;我不能实时获得一致的成功,当有命中时,通常会在圆圈上cos相同的位置播放两个。因为手臂精确到的小数位数比光点的位置多得多,所以似乎很难用if语句很好地捕捉到它。我不知道还能怎么做。任何想法都将不胜感激!

代码片段:

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2017-05-21 11:42:28

没有足够的代表发表评论。抱歉的!但是你可以试试这个:

代码语言:javascript
复制
screen.get_at(x,y)

方法:将所有斑点的中心存储在一个元组center_lists中

代码语言:javascript
复制
for i in center_lists:
    if screen.get_at(i) == green:
        #play the sound

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44090007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档