- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个圆形雷达。雷达的“ ARM ”以恒定速度旋转。我需要雷达上的光点在它们经过时播放声音。
我该如何着手解决这个问题,以确保每次革命都能成功?
(使用pygame)
我试过使用 if 语句来判断“ ARM ”的 (x, y) 坐标和 blip 是否相等。但是我没有获得一致的成功。我还尝试进行斜率测量和余弦测量,并检查它们在 ARM 和光点之间是否相等;我并没有实时获得一致的成功,当有命中时,通常会有两个在圆上 cos 相同的位置进行。因为 ARM 比 blips 的位置精确到更多的小数位,所以我似乎很难用 if 语句很好地捕捉到。我不知道还有什么办法可以解决这个问题。任何想法将不胜感激!
代码片段:
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/
我想尝试用 Java OpenGL 构建雷达。基本上,在该方法中,您传递玩家的当前位置、玩家面对的角度以及敌人的位置。如果敌人就在正前方,那么红点(象征敌人)应该在圆圈(雷达)的顶部,可以说是0度。如
我只是对声纳设备有一个总体的思考。声纳结果如何用数据类型表示。 目前我想出的解决方案是拥有一个 360 2D array,其值表明物体被击中时的距离,最大范围意味着那里什么也没有。这样做的问题是,对于
我有一个雷达图Js。 我不知道如何在区域内放置径向渐变。放置当前代码时,默认只取1种颜色作为background-color 当前代码: let ctx = document.getElementBy
我用在线生成器实现了 amChart。这是结果: https://live.amcharts.com/ODVhY/ 如您所见,带有值的标签仅在红牛上可见。 如何将其扩展到所有 5 个项目符号? 我的配
我需要一种灵活的方法在 ggplot2 中制作雷达/蜘蛛图。从我在 github 和 ggplot2 组上找到的解决方案,我已经走到了这一步: library(ggplot2) # Define a
我想用radare2调试程序“id3v2 -c halo test.mp3”。 如何将参数“-c halo test.mp3”传递给radare2? 我只用 rarun2 找到了一些东西,但是当我这样
我在哪里可以找到适用于 iOS 的优秀蜘蛛(雷达)图表库? (如下图) 我检查了“Core Plot”和“iOSPlot”开源项目,但这些都不支持蜘蛛图。 BR,元一。 最佳答案 在 Github 上
我是一名优秀的程序员,十分优秀!