Python实现游戏后台像素颜色检测异常问题求助
游戏后台检测程序屏幕截取异常解决思路
问题背景
我要开发一款后台运行的游戏检测程序,持续截取屏幕画面,当游戏中角色死亡时,预先指定的屏幕坐标(1302,341)像素会变为(254,252,0),程序需要识别这个变化并执行对应命令。
我尝试了两段代码:
第一段代码:
while u > v: myScreenshot = pyautogui.screenshot() myScreenshot.save(DIRECTORY) image = Image.open(DIRECTORY) picture = image.load() print(picture[1302, 341]) n = n+1 v += 1
第二段代码:
import time from PIL import ImageGrab from PIL import Image a = 10 b = 1 time.sleep(2) while a > b: screenshot = ImageGrab.grab() x_coord = 1302 y_coord = 341 color_at_coord = str(screenshot.getpixel((x_coord, y_coord))) print(color_at_coord) b +=1 if color_at_coord == "(254, 252, 0)": print("Correct!")
目前程序能正常截图,但游戏死亡时,程序检测到的是灰色系颜色值而非预期的(254,252,0),怀疑程序截取的是Visual Studio Code窗口而非游戏窗口。
解决思路
- 调整游戏显示模式:如果游戏使用全屏独占模式,
ImageGrab或pyautogui.screenshot()通常无法捕获游戏画面,只能获取前台其他窗口(比如VS Code)。先把游戏改成窗口化或无边框窗口模式,再测试截图是否正常。 - 精准捕获游戏窗口:不要截取整个屏幕,而是定位游戏窗口句柄,只捕获该窗口区域。推荐用
mss库(对游戏窗口兼容性更好)结合pygetwindow获取游戏窗口,避免截取到其他窗口。 - 修正坐标偏移:如果游戏是窗口化,之前记录的全屏坐标(1302,341)会因为窗口位置偏移失效,需要重新获取游戏窗口内的相对坐标,或者用
全屏坐标 - 游戏窗口左上角坐标计算出窗口内的目标点。 - 优化颜色匹配逻辑:第二段代码把颜色转成字符串对比容易出错,直接用元组
(254,252,0)对比更可靠,避免字符串格式差异导致的匹配失败。
修正后的代码示例
import time import mss import pygetwindow as gw # 替换成你的游戏窗口标题(可以用gw.getAllTitles()查看所有窗口标题) game_title = "你的游戏窗口标题" game_window = gw.getWindowsWithTitle(game_title)[0] # 计算游戏窗口内的目标相对坐标(原全屏坐标减去窗口左上角坐标) target_rel_x = 1302 - game_window.left target_rel_y = 341 - game_window.top # 定义游戏窗口的捕获区域 monitor = { "top": game_window.top, "left": game_window.left, "width": game_window.width, "height": game_window.height } with mss.mss() as sct: while True: # 仅捕获游戏窗口画面 screen_img = sct.grab(monitor) # 获取目标坐标的颜色 pixel_color = screen_img.pixel(target_rel_x, target_rel_y) print(f"当前颜色:{pixel_color}") if pixel_color == (254, 252, 0): print("检测到角色死亡!执行对应命令") # 这里添加你需要执行的命令,比如重启游戏、发送通知等 # os.system("your_command_here") time.sleep(0.1) # 控制检测频率,避免占用过高资源
内容的提问来源于stack exchange,提问作者Calax
相关产品推荐
相关产品推荐

