python - Pygame - 如何在表面中找到某种颜色
问题描述
我正在创建一个 Asteroids 视频游戏,但遇到了一些麻烦。首先,对于射击船,我使用了一个三角形,其中最顶部和最底部的像素用不同的颜色标记,略有不同。顶部像素的 RGB 值不是应该的 (255, 255, 255),而是 (254, 255, 255),以便更容易识别它。问题来自于旋转。当船旋转时,像素不在同一个位置,我需要它们进行拍摄。船使用旋转
pygame.transform.rotate(playerImage, currentRotation)
我的问题是,我如何在表面内寻找特定颜色?我试过这个方法:
for i in range(playerImage.get_height()):
for i in range(playerImage.get_width()):
if playerImage.get_at((j, i)) == (255, 255, 254, 255): # the other 255 is the alpha value
topDot = [j, i]
if playerImage.get_at((j, i)) == (254, 255, 255, 255):
bottomDot = [j, i]
该代码确实可以工作,但速度非常慢,并且会减慢程序的其余部分。有没有办法使用不同的方法来加快速度?
解决方案
对于您解决问题的方式,不:找到一个技能像素中的哪个具有给定值,您必须访问每个像素。如果图像具有其他属性,其中像素取决于附近的值,您可以使用这些属性来改进搜索,但不是您所说的那样。
但是,您确实有一个明显的解决方案:使用旋转参数来计算所需像素的位置。旋转算法可能与您的计算在任何方向上相差 1,但无论如何,您几乎都在所需位置的顶部。您要检查的像素不超过 9 个。
应用覆盖良好的旋转方程,然后从那里开始工作。
推荐阅读
- r - ggraph中的错误,同时在R中绘制图形
- php - 即使使用正确的凭据也无法登录 wp-admin
- javascript - 如何通过模块将javascript添加到silverstripe cms中的所有页面?
- cmd - “该系统找不到指定的路径。” 在 cmd 开头
- python - 如何连接两个水平 Qslider,它们的最大值和最小值相互依赖于 pyqt5 的当前值
- angular - 添加多个条件时Angular ngClass不起作用
- linq-to-xml - 如何强制 LinqToXML 将 XAtribute 值写为“&”而不是“&”?
- excel - 当 D 列中的值 = 工作簿中每个工作表的今天日期时,自动发送一封电子邮件,其中包含 A 列中的对应值列表
- apache-kafka - kafka + 为什么不从 kafka 显示有关保留字节的详细信息 –describe
- javascript - 从用户上传的模板动态创建 UI 组件