You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 11:52:44