DyberPet:基于PySide6的模块化桌面宠物框架设计与实现
DyberPet基于PySide6的模块化桌面宠物框架设计与实现【免费下载链接】DyberPetDesktop Cyber Pet Framework based on PySide6项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPetDyberPet是一个基于PySide6构建的开源桌面宠物框架采用模块化架构设计将复杂的虚拟伙伴系统解耦为动画引擎、状态管理、任务系统和交互模块等多个独立组件。该框架解决了传统桌面宠物程序在可扩展性、配置灵活性和系统集成性方面的技术瓶颈通过JSON驱动的配置系统和插件化设计为开发者提供了创建个性化桌面伙伴的完整技术栈。架构设计解耦与模块化的技术实现DyberPet的核心架构采用分层设计理念将系统划分为表现层、业务逻辑层和数据层。表现层基于PySide6的现代化GUI框架业务逻辑层通过事件驱动引擎处理用户交互数据层则采用JSON配置文件实现数据与逻辑的完全分离。核心模块解析动画管理系统位于DyberPet/Dashboard/animationUI.py实现了基于帧序列的非阻塞动画引擎。系统采用QTimer进行定时刷新通过Act对象封装动画序列支持多状态切换和优先级调度class Act: def __init__(self, images(), act_nameNone, act_num1, need_moveFalse, directionNone, frame_move10, frame_refresh0.04, anchor[0,0]): self.images images self.act_name act_name self.act_num act_num self.need_move need_move self.direction direction self.frame_move frame_move self.frame_refresh frame_refresh self.anchor anchor状态管理系统在statusUI.py中实现采用观察者模式实时追踪角色状态。系统定义了三个核心状态维度饱食度(HP)、活力(FV)和好感度通过QProgressBar和LevelBadge组件可视化展示状态变化class DP_HpBar(QProgressBar): hptier_changed Signal(int, str, namehptier_changed) hp_updated Signal(int, namehp_updated) def __init__(self, *args, **kwargs): super(DP_HpBar, self).__init__(*args, **kwargs) self.hp_tiers sys_hp_tiers # [0,50,80,100] self.hp_max 100 self.interval 1 self.hp_inner 0配置管理系统在conf.py中实现采用工厂模式动态加载角色配置。PetConfig类负责解析JSON配置文件将角色属性、动画序列和交互参数转换为运行时对象class PetConfig: def __init__(self): self.petname None self.width 128 self.height 128 self.scale 1.0 self.refresh 5 self.interact_speed 0.02 self.act_dict {} self.random_act []事件驱动引擎异步处理与状态同步机制DyberPet采用多线程架构处理并发事件主线程负责UI渲染工作线程处理动画计算和状态更新。modules.py中的AnimationThread和InteractionThread实现了异步任务处理class AnimationThread(QThread): def __init__(self, pet_conf, parentNone): super().__init__(parent) self.pet_conf pet_conf self._running True self._pause False def run(self): while self._running: if not self._pause: self.random_act() time.sleep(0.1)事件总线设计通过Qt的信号槽机制实现模块间通信。系统定义了多种自定义信号如hptier_changed、fvchange_note等确保状态变更能够及时通知相关组件class Notification(QWidget): def hpchange_note(self, hp_tier, direction): 处理饱食度变化通知 message fHP {increased if direction up else decreased} to tier {hp_tier} self.setup_notification(hp, message)配置系统JSON驱动的数据驱动架构DyberPet的配置系统采用JSON作为数据交换格式实现了数据与代码的完全分离。角色配置、物品属性和动画序列都通过JSON文件定义角色配置文件示例(res/role/Kitty/pet_conf.json){ width: 72, height: 64, scale: 1.0, interact_speed: 0.02, random_act: [ { name: default, act_list: [default], act_prob: 1.0, act_type: [0, 10000] } ], act_dict: { default: { act_list: [stand_0, stand_1, stand_2, stand_3, stand_4], act_prob: 1.0, act_type: [0, 10000] } } }动画序列配置(res/role/Kitty/act_conf.json){ stand: [ { act_list: [stand_0, stand_1, stand_2, stand_3, stand_4], act_num: 1, need_move: false, direction: null, frame_move: 10, frame_refresh: 0.04, anchor: [0, 0] } ] }交互系统设计多模态输入与响应机制DyberPet支持多种交互模式包括鼠标拖拽、点击交互、键盘快捷键和定时任务。交互系统在DyberPet.py中实现采用状态机管理用户输入class DyberPet(QWidget): def __init__(self, parentNone, curr_pet_nameNone, pets(), screens[]): super().__init__(parent) # 鼠标事件处理 self.mouse_press_pos None self.mouse_move_pos None self.is_dragging False def mousePressEvent(self, event): if event.button() Qt.LeftButton: self.mouse_press_pos event.globalPos() self.is_dragging True对话系统采用有限状态机设计支持分支对话和多路径选择。系统通过bubbleManager.py管理对话气泡的触发和显示逻辑class BubbleManager(QObject): def __init__(self, parentNone): super().__init__(parent) self.bubble_config self.load_bubble_config() def trigger_bubble(self, bb_type): 触发指定类型的对话气泡 if bb_type in self.bubble_config: bubble_dict self.bubble_config[bb_type] self.add_usertag(bubble_dict)图DyberPet对话系统的单分支流程图展示了线性对话的状态转换逻辑模块化扩展机制插件化架构设计DyberPet采用插件化架构设计支持通过配置文件扩展新功能。系统定义了标准的扩展接口开发者可以通过实现特定接口添加新模块物品系统扩展在res/items/Default/items_config.json中定义物品属性和效果{ burger: { name: 汉堡, type: food, hp_value: 20, fv_value: 5, price: 10, description: 恢复20点饱食度和5点好感度 } }迷你宠物系统通过Accessory.py实现附属宠物功能支持独立的动画和行为逻辑class DPAccessory(QWidget): def __init__(self, parentNone): super().__init__(parent) self.isSubpet False self.pet_name None self.act_dict {} def init_conf(self, pet_name: str) - None: 初始化迷你宠物配置 self.pet_name pet_name path os.path.join(basedir, fres/role/{pet_name}/pet_conf.json) # 加载配置逻辑状态持久化与数据管理系统采用JSON格式进行数据持久化在conf.py中实现了SaveData和PetData类管理游戏状态class SaveData: def __init__(self, petsList): self.petsList petsList self.data {} def init_data(self): 初始化保存数据 for petname in self.petsList: self.data[petname] { hp_value: 100, hp_tier: 3, fv_value: 0, fv_lvl: 0, coins: 0, items: {} }数据版本管理系统支持数据版本迁移通过convert_fv_versions函数处理不同版本间的数据兼容性def convert_fv_versions(fv:int, fv_lvl:int, from_fv_bar:list, to_fv_bar:list): 转换好感度版本数据 total_fv sum(from_fv_bar[:fv_lvl]) fv new_lvl 0 new_fv total_fv # 计算逻辑性能优化策略DyberPet在性能优化方面采用了多种技术手段资源懒加载图片和配置资源在需要时才加载减少内存占用def _load_all_pic(pet_name: str) - dict: 懒加载角色图片资源 pic_dict {} action_folder os.path.join(basedir, fres/role/{pet_name}/action/) if os.path.exists(action_folder): for img_file in os.listdir(action_folder): if img_file.endswith(.png): img_path os.path.join(action_folder, img_file) pic_dict[img_file] _get_q_img(img_path) return pic_dict动画帧优化采用增量更新策略避免全帧重绘def animat(self, act_name): 执行动画序列 if act_name in self.act_dict: act self.act_dict[act_name] for i in range(act.act_num): for img in act.images: self.set_img(img) time.sleep(act.frame_refresh)事件去重通过时间戳和状态检查避免重复事件处理def _mightEventTrigger(self): 智能事件触发机制 current_time time.time() if current_time - self.last_event_time self.event_cooldown: self.last_event_time current_time return True return False跨平台兼容性实现基于PySide6的跨平台特性DyberPet实现了Windows、macOS和Linux的多平台支持。系统通过条件编译处理平台差异from sys import platform if platform win32: basedir elif platform linux: configdir os.path.dirname(os.environ[HOME]/.config/DyberPet/DyberPet) else: # macOS configdir basedir系统托盘集成通过SystemTray类实现跨平台的系统托盘支持class SystemTray(QSystemTrayIcon): def __init__(self, menu, parentNone): super().__init__(parent) self.setMenu(menu) self.activated.connect(self.on_tray_icon_activated)测试与调试支持框架内置了完善的调试工具和测试接口日志系统在utils.py中实现了分级日志记录def log(*args, **kwargs): 统一的日志记录函数 timestamp datetime.now().strftime(%Y-%m-%d %H:%M:%S) message .join(str(arg) for arg in args) print(f[{timestamp}] {message})配置验证通过CheckCharFiles函数验证角色配置的完整性def CheckCharFiles(folder): 检查角色文件完整性 required_files [pet_conf.json, act_conf.json] missing_files [] for file in required_files: if not os.path.exists(os.path.join(folder, file)): missing_files.append(file) return missing_files开发工具链与构建系统DyberPet提供了完整的开发工具链包括模组开发工具animDesignUI.py提供了可视化的动画设计界面支持帧序列编辑和预览class AnimDesignUI(QWidget): def __init__(self, parentNone): super().__init__(parent) self.setup_ui() def _update_HP_lvl(self): 更新HP等级显示 hp_tier self.hp_combo.currentText() self.hp_label.setText(fHP Tier: {hp_tier})配置管理界面DyberControlPanel.py提供了集中式的系统配置管理class DyberControlPanel(QWidget): def __init__(self, minWidth800, minHeight800): super().__init__() self.initNavigation() self.initWindow()图DyberPet的多分支对话决策树展示了复杂的交互路径和条件分支逻辑技术挑战与解决方案在开发过程中DyberPet面临并解决了多个技术挑战实时动画同步通过QTimer和线程锁确保动画帧率稳定避免UI卡顿class AnimationThread(QThread): def run(self): while self._running: if not self._pause: frame_time 1.0 / self.pet_conf.refresh start_time time.time() # 执行动画逻辑 elapsed time.time() - start_time sleep_time max(0, frame_time - elapsed) time.sleep(sleep_time)内存管理优化采用对象池和缓存机制管理图片资源避免频繁的IO操作class ImageCache: def __init__(self): self.cache {} def get_image(self, path): if path not in self.cache: self.cache[path] QPixmap(path) return self.cache[path]状态一致性保证通过事务性操作和回滚机制确保数据一致性def change_item(self, item, item_changeNone, item_numNone, item_indexNone): 原子性修改物品数量 old_value self.data[self.current_pet][items].get(item, 0) try: if item_change is not None: new_value old_value item_change else: new_value item_num self.data[self.current_pet][items][item] new_value self.save_data() except Exception as e: # 回滚操作 self.data[self.current_pet][items][item] old_value raise e未来技术路线图DyberPet的技术演进方向包括AI集成架构计划集成大型语言模型实现智能对话和情境感知class AIIntegration: def __init__(self, model_path): self.model load_model(model_path) def generate_response(self, context, emotion_state): 基于上下文和情感状态生成回应 prompt self._build_prompt(context, emotion_state) return self.model.generate(prompt)云同步机制设计跨设备状态同步协议支持多终端体验连续性class CloudSync: def __init__(self, user_id): self.user_id user_id self.sync_client SyncClient() def upload_state(self, state_data): 上传状态数据 encrypted_data self._encrypt(state_data) return self.sync_client.upload(encrypted_data)3D渲染支持扩展渲染引擎支持3D模型通过插件系统集成不同渲染后端class RenderEngine: def __init__(self, backend2d): if backend 3d: self.renderer ThreeDRenderer() else: self.renderer TwoDRenderer()DyberPet通过其模块化架构、事件驱动设计和可扩展的配置系统为桌面虚拟伙伴开发提供了完整的技术解决方案。框架的设计哲学强调可维护性和扩展性使得开发者能够专注于内容创作而非底层实现细节为桌面交互应用开发树立了新的技术标准。【免费下载链接】DyberPetDesktop Cyber Pet Framework based on PySide6项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

英语(一)心理描写-固定搭配—东方仙盟

英语(一)心理描写-固定搭配—东方仙盟

一、情绪心理类短语(15 句)be ashamed ofYou have nothing to be ashamed of. 你没有什么值得羞愧的。He is ashamed of his careless mistakes in the exam. 他为考试里粗心犯下的错误感到惭愧。Don’t be ashamed of asking questions when studying E…

2026/10/27 2:27:04 阅读更多 →
2026最新5款企业AI编程工具选型深度对比实测

2026最新5款企业AI编程工具选型深度对比实测

作为一名在企业做后端开发已经五年的工程师,我最近半年一直在帮团队评估适合企业场景的AI编程工具。毕竟现在大模型时代,AI辅助编码已经不是要不要用的问题,而是选哪款工具既能提升效率又能满足企业的安全合规要求。TRAE是字节跳动出品的国内…

2026/10/25 15:20:41 阅读更多 →
如何利用EPANET开源工具包进行供水管网水力与水质分析

如何利用EPANET开源工具包进行供水管网水力与水质分析

如何利用EPANET开源工具包进行供水管网水力与水质分析 【免费下载链接】EPANET The Water Distribution System Hydraulic and Water Quality Analysis Toolkit 项目地址: https://gitcode.com/gh_mirrors/ep/EPANET 在当今城市水资源管理和管网系统优化中,E…

2026/10/25 21:31:00 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →