Skip to content

Repository files navigation

GameResX - 游戏美术资源对比工具

一个专为游戏开发者设计的跨平台美术资源管理与对比工具

基于 Electron + React + TypeScript 构建

功能特性快速开始架构设计开发指南路线图


📋 项目概述

背景与目标

GameResX 是为游戏开发团队设计的美术资源管理工具,主要用于游戏换皮场景。支持:

  • 可视化管理和分类美术资源(UI、Icon、贴图等)
  • AI 生成图与原始图的对比预览
  • 批量管理资源标签和生图提示词(规划中)
  • 自动化资源替换流程(规划中)

当前阶段

第一阶段(已完成):轻量版文件管理器,聚焦图片资源的树状浏览和双区域可视化预览。

✨ 功能特性

已实现(v1.0.0 - 第一阶段)

  • 📁 目录浏览

    • 树状目录结构,仿 Mac Finder 分栏模式
    • 自动过滤和识别包含图片的文件夹
    • 支持展开/折叠,实时导航
  • 🖼️ 图片预览

    • 中间栏:小图对比(原图 + 占位图并排显示)
    • 右侧栏:大图详细对比,左右分屏
    • 支持图片格式:PNG、JPG、JPEG、WebP
  • 🔍 交互功能

    • 图片懒加载优化性能
    • 鼠标滚轮缩放(0.1x - 10x)
    • 鼠标拖拽平移
    • 一键重置视图
  • 🎨 界面设计

    • 深色主题,护眼友好
    • 三栏自适应布局
    • 流畅的动画过渡
    • macOS 原生窗口样式

规划中(后续阶段)

  • 资源管理

    • 资源标签系统
    • AI 生图提示词管理
    • 原始资源缓存机制
    • 批量操作支持
  • AI 集成

    • AI 生图 API 对接
    • 自动化资源替换
    • 提示词模板库
  • 高级对比

    • 图片元数据展示(尺寸、格式、大小)
    • 像素级对比
    • 色差分析
    • 同步缩放模式
  • 增强功能

    • 文件重命名/移动
    • 批量导入/导出
    • 快捷键定制
    • 主题切换

🚀 快速开始

环境要求

  • Node.js: >= 18.0.0(推荐 20+)
  • npm: >= 9.0.0
  • 操作系统: macOS 10.13+ / Windows 10+

安装

# 克隆项目
git clone <repository-url>
cd GameResX

# 安装依赖
npm install

开发

# 启动开发服务器(热重载)
npm run dev

打包

# 构建生产版本
npm run build

# 打包 macOS 应用
npm run build:mac

# 打包 Windows 应用
npm run build:win

使用方法

  1. 启动应用后,点击"选择目录"按钮
  2. 选择游戏项目的美术资源根目录
  3. 左侧树状目录会显示所有包含图片的文件夹
  4. 点击文件夹,中间栏显示该文件夹下的图片列表
  5. 点击图片,右侧栏显示大图对比(目前生成图为占位图)
  6. 使用鼠标滚轮缩放,拖拽平移查看细节

🏗️ 架构设计

技术栈

层级 技术 说明
桌面框架 Electron 28 跨平台桌面应用
构建工具 Vite + electron-vite 快速构建,HMR 支持
前端框架 React 18 组件化 UI
开发语言 TypeScript 5 类型安全
样式方案 Tailwind CSS 实用优先的 CSS 框架
状态管理 Zustand 轻量级状态管理
图标库 Lucide React 现代化图标

项目结构

GameResX/
├── src/
│   ├── main/                    # Electron 主进程
│   │   ├── index.ts             # 主进程入口,窗口管理
│   │   └── fileSystem.ts        # 文件系统操作(扫描、读取)
│   │
│   ├── preload/                 # 预加载脚本
│   │   └── index.ts             # 暴露安全 API 给渲染进程
│   │
│   └── renderer/                # 渲染进程(React 应用)
│       ├── index.html           # HTML 入口
│       └── src/
│           ├── main.tsx         # React 入口
│           ├── App.tsx          # 根组件
│           │
│           ├── components/      # UI 组件
│           │   ├── layout/
│           │   │   └── ThreeColumnLayout.tsx   # 三栏布局
│           │   ├── sidebar/
│           │   │   ├── FolderTree.tsx          # 目录树
│           │   │   └── TreeNode.tsx            # 树节点
│           │   ├── filelist/
│           │   │   ├── FileList.tsx            # 文件列表
│           │   │   └── FileItem.tsx            # 文件项(小图对比)
│           │   └── preview/
│           │       └── CompareView.tsx         # 大图对比
│           │
│           ├── stores/          # 状态管理
│           │   └── useAppStore.ts              # 全局状态
│           │
│           ├── hooks/           # 自定义 Hooks
│           │   ├── useFileSystem.ts            # 文件系统操作
│           │   └── useLazyImage.ts             # 图片懒加载
│           │
│           ├── types/           # TypeScript 类型
│           │   └── index.ts
│           │
│           └── styles/
│               └── index.css    # 全局样式
│
├── resources/                   # 应用资源
├── out/                         # 构建输出(自动生成)
│
├── electron.vite.config.ts      # electron-vite 配置
├── package.json
├── tsconfig.json
├── tsconfig.node.json           # Node 环境配置(主进程/预加载)
├── tsconfig.web.json            # Web 环境配置(渲染进程)
├── tailwind.config.js
└── postcss.config.js

架构图

进程通信架构

┌─────────────────────────────────────────────────────────────┐
│                        Electron 应用                         │
├─────────────────────────────────────────────────────────────┤
│                                                               │
│  ┌─────────────────┐         IPC          ┌──────────────┐  │
│  │   渲染进程        │◄──────────────────►│   主进程      │  │
│  │   (React UI)     │   contextBridge    │   (Node.js)   │  │
│  │                  │                     │               │  │
│  │  • App.tsx       │                     │  • 窗口管理   │  │
│  │  • Components    │                     │  • 文件扫描   │  │
│  │  • Zustand Store │                     │  • 图片读取   │  │
│  └─────────────────┘                     └──────────────┘  │
│         ▲                                        │           │
│         │                                        │           │
│         └────────── Preload Script ──────────────┘          │
│              • 安全 API 暴露                                  │
│              • 类型定义                                       │
└─────────────────────────────────────────────────────────────┘

数据流

用户操作 → UI 组件 → Zustand Action → IPC 调用 → 主进程处理 → 返回数据 → 更新 Store → 重新渲染

核心模块说明

1. 主进程(Main Process)

职责

  • 创建和管理应用窗口
  • 处理文件系统操作(Node.js API)
  • 响应渲染进程的 IPC 请求

核心功能

// src/main/fileSystem.ts
- scanDirectory(rootPath): 扫描目录,构建树状结构
- getImagesInFolder(folderPath): 获取文件夹中的图片列表
- readImageAsBase64(imagePath): 读取图片为 base64

安全考虑

  • 仅主进程可访问文件系统
  • 所有文件操作需通过 IPC 验证
  • 使用 contextIsolation: true

2. 预加载脚本(Preload Script)

职责

  • 通过 contextBridge 暴露安全 API
  • 作为主进程和渲染进程的桥梁

API 定义

window.api = {
  selectDirectory(): Promise<string | null>
  scanDirectory(rootPath: string): Promise<TreeNode[]>
  getImagesInFolder(folderPath: string): Promise<ImageFile[]>
  readImageAsBase64(imagePath: string): Promise<string>
}

3. 渲染进程(Renderer Process)

职责

  • 渲染 UI 界面
  • 处理用户交互
  • 管理应用状态

状态管理(Zustand)

interface AppState {
  rootPath: string | null              // 根目录路径
  directoryTree: TreeNode[]            // 目录树
  selectedFolderPath: string | null    // 选中的文件夹
  imageList: ImageFile[]               // 图片列表
  selectedImage: ImageFile | null      // 选中的图片
  expandedFolders: Set<string>         // 展开的文件夹
  isLoading: boolean                   // 加载状态
}

组件层次

App.tsx
├── ThreeColumnLayout.tsx
│   ├── FolderTree.tsx
│   │   └── TreeNode.tsx (递归)
│   ├── FileList.tsx
│   │   └── FileItem.tsx (懒加载)
│   └── CompareView.tsx (缩放/平移)

性能优化

  1. 图片懒加载

    • 使用 IntersectionObserver 监听可视区域
    • 仅加载用户可见的图片
    • 避免一次性加载大量图片导致卡顿
  2. 虚拟滚动(可扩展)

    • 当前使用原生滚动
    • 后续可集成 react-window 处理超大列表
  3. Base64 缓存(规划)

    • 主进程可添加图片缓存层
    • 减少重复读取文件

🛠️ 开发指南

添加新功能的步骤

1. 添加主进程功能

// src/main/fileSystem.ts
export async function newFeature(params: any): Promise<any> {
  // 实现逻辑
}

// src/main/index.ts
ipcMain.handle('namespace:action', async (_, params) => {
  return await newFeature(params)
})

2. 更新预加载 API

// src/preload/index.ts
const api = {
  // ...existing
  newFeature: (params: any): Promise<any> => {
    return ipcRenderer.invoke('namespace:action', params)
  }
}

3. 添加渲染进程逻辑

// src/renderer/src/hooks/useNewFeature.ts
export function useNewFeature() {
  const handleAction = async () => {
    const result = await window.api.newFeature(params)
    // 处理结果
  }
  return { handleAction }
}

4. 创建 UI 组件

// src/renderer/src/components/NewFeature.tsx
export function NewFeature() {
  const { handleAction } = useNewFeature()
  // 渲染 UI
}

代码规范

  • TypeScript 严格模式:所有代码必须通过类型检查
  • 组件命名:PascalCase(如 FileList.tsx
  • Hooks 命名:use 前缀(如 useFileSystem.ts
  • 样式:优先使用 Tailwind 实用类
  • 状态管理:通过 Zustand store 集中管理

调试技巧

# 开启 Electron DevTools
在 App 中按 Cmd+Option+I (Mac) 或 Ctrl+Shift+I (Windows)

# 查看主进程日志
查看终端输出

# 查看渲染进程日志
打开 DevTools Console

常见问题

Q: 图片不显示?

  • 检查文件路径是否正确
  • 确认图片格式是否支持(png/jpg/jpeg/webp)
  • 查看 DevTools Console 是否有错误

Q: 目录树为空?

  • 确认选择的目录下有图片文件
  • 检查文件夹权限

Q: 性能卡顿?

  • 检查图片数量,超大列表需要虚拟滚动
  • 优化图片大小,考虑生成缩略图

🗺️ 路线图

第一阶段 ✅(已完成)

  • 项目初始化和架构搭建
  • 三栏布局界面
  • 目录树浏览
  • 图片列表展示
  • 大图对比预览
  • 基础交互(缩放/平移)

第二阶段 📋(规划中)

  • 缓存目录配置
  • 生成图管理逻辑
  • 图片元数据展示
  • 资源标签系统
  • 提示词输入和编辑

第三阶段 🚀(未来)

  • AI 生图 API 集成
  • 批量生成和替换
  • 高级对比功能
  • 导入/导出功能
  • 插件系统

📦 依赖说明

生产依赖

{
  "@electron-toolkit/utils": "^4.0.0",  // Electron 工具集
  "lucide-react": "^0.424.0",           // 图标库
  "zustand": "^4.5.4"                   // 状态管理
}

开发依赖

{
  "electron": "^28.3.3",                 // Electron 框架
  "electron-vite": "^2.3.0",             // 构建工具
  "react": "^18.3.1",                    // UI 框架
  "typescript": "^5.5.4",                // TypeScript
  "tailwindcss": "^3.4.7",               // CSS 框架
  "vite": "^5.4.2"                       // 构建工具
}

🤝 贡献指南

提交规范

使用语义化提交信息:

feat: 添加新功能
fix: 修复 bug
docs: 文档更新
style: 代码格式调整
refactor: 重构代码
perf: 性能优化
test: 测试相关
chore: 构建/工具配置

分支策略

  • main: 稳定版本
  • develop: 开发分支
  • feature/*: 新功能分支
  • fix/*: Bug 修复分支

📄 许可证

本项目仅供学习和内部使用。

📮 联系方式

如有问题或建议,请提交 Issue。


构建工具: Electron + React + TypeScript
最后更新: 2026-01-24
当前版本: v1.0.0

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages