【发布时间】:2023-03-31 04:06:01
【问题描述】:
我知道要在 Pygame 中获得像素颜色,我使用 get_at。
但是我需要在我的屏幕外部获得一个像素,即,我有一个图像已经被blitted,只有一部分可见。
例如,500,500 屏幕内的 1000x1000 图像将只有 50% 可见,其余部分将“关闭”屏幕。所以我需要访问屏幕外的部分。
但是,如果我引用get_at 的坐标大于或小于屏幕尺寸,Pygame 会因错误而停止:
IndexError: 像素索引超出范围
import pygame
W = 1600
H = 600
pygame.init()
screen = pygame.display.set_mode([W, H])
image = pygame.image.load('huge_background.png').convert_alpha()
screen.blit(image, [-5000, -420])
pygame.display.update()
screen.get_at([100, -5]) # generates "IndexError: pixel index out of range"
如何获取屏幕尺寸之外的背景图像像素颜色?
这是当前可见的 pygame 屏幕 (1600 x 600)。 3 行(洋红色)是碰撞“检测器”:
这是会滚动的背景 (8000 x 8000):
因此,碰撞检测器行可能会超出 pygame 屏幕限制,但需要“读取”外部像素以检测碰撞。
【问题讨论】:
-
您无法访问
screen之外的像素,因为没有像素。屏幕只是一个具有窗口大小的表面。您可以访问在屏幕外闪烁的image表面的像素。你能解释一下你为什么要这样做吗?你的实际目标是什么? -
我正在创建一个比赛程序,我的汽车需要检测前方是否有障碍物(例如,前方 500 像素)。汽车始终聚焦在屏幕上,并且背景图像(赛道)正在滚动。但根据汽车的位置,前方 500 像素将超出可见屏幕。但我知道背景图像有障碍或曲线。因此,即使当前没有显示这些像素,我也需要“读取”这些像素。
-
好的,那么您可以访问背景图像/表面的像素并将当前偏移量添加到像素坐标。您仍然必须确保坐标在表面区域内以防止错误。是否只有一个大背景表面作为轨道?你使用像素颜色来检查它是障碍物还是道路?
-
我在原帖中插入了一些图片和描述。
-
@skrx 知道如何解决这个问题吗?
标签: python python-3.x colors pygame pixel