# java大作业-桌面宠物
**Repository Path**: bingcm/java-homework---desktop-pets
## Basic Information
- **Project Name**: java大作业-桌面宠物
- **Description**: 使用JAVA编写的桌面宠物
- **Primary Language**: Java
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2023-11-29
- **Last Updated**: 2024-01-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 项目背景与目标
该项目旨在开发一个拓展性强的桌面宠物应用,用于用户的日常娱乐。通过该应用,用户可以轻松地与移动,切换宠物。
- 制作可爱/有人气的宠物动态效果。
- 实现宠物对话。
- 提供多种宠物模型,使用户可以随时切换。
## 0. 技术栈
- **JavaFX**:用于构建宠物界面和实现交互功能。
- **FXML**:用于界面设计。
## 1. 程序的运行环境、安装步骤
1. 运行环境:JDK21
2. 程序组成部分:
- `deskpot_pet.jar`:可执行jar包文件
- `README.md`:项目开发文档
3. 安装步骤
1. 安装JRE21
2. 下载`deskpot_pet.jar`
3. 双击运行`deskpot_pet.jar`文件或打开命令行窗口,进入`deskpot_pet.jar`所在目录,输入`java -jar deskpot_pet.jar`命令运行程序
4. 源码编译运行步骤
1. 安装JDK21
2. 安装IntelliJ IDEA 2023.1
3. 安装JavaFX 21.0.1
4. 下载 `pom.xml` 文件中的依赖包
7. 打开IntelliJ IDEA 2021.1(Ultimate Edition),点击“Open”按钮,选择项目所在目录,点击“OK”按钮
8. 点击“Run”按钮,选择“Edit Configurations...”选项,点击“+”按钮,选择“Application”选项,点击“OK”按钮
9. 在“Main class”输入框中输入`Main`,点击“OK”按钮
10. 点击“Run”按钮,即可运行程序
## 2. 程序开发平台
1. 代码行数:约 300 行
2. 开发环境:IntelliJ 2023.1(Ultimate Edition) + JDK21 + JavaFX 21.0.1
## 3. 程序功能说明
1. 宠物显示
打开程序后宠物自动显示
2. 宠物移动
使用wasd控制宠物上左下右移动
3. 宠物对话框取消显示
点击宠物对话框即可隐藏,再次点击或移动宠物显示
4. 宠物切换
使用托盘图标功能菜单可实现宠物切换
5. 宠物隐藏/显示
使用q或者托盘功能hide可以隐藏宠物,使用托盘功能show可以显示宠物
6. 宠物退出
使用托盘功能quit可以退出宠物
## 4. 项目结构
- 本项目的结构如下图所示:
~~~plantuml
└─main
├─java
│ └─pet_class
│ └─DialogController
│ └─Main
│ └─MainController
│ └─PetController
│
└─resources
└─com
└─pet_class
└─260.jpg
└─dialogBox.png
└─systemTray.png
└─biu
│ └─left.gif
│ └─main.gif
│ └─right.gif
│
└─knight
└─left.gif
└─main.gif
└─right.gif
~~~
- 本项目的结构说明如下:
- `main`:包含了项目的主要代码,包括`DialogController`、`Main`、`MainController`、`PetController`四个类。
- `DialogController`负责对对话框进行控制
- `Main`起到启动的作用
- `MainController`负责托盘图标的管理和整体控制
- `PetController`负责宠物的控制
## 5. 项目亮点
- **动态宠物**:宠物形象可爱卡通,符合大部分用户对宠物的需求。
- **全新构思**:在开源平台上没有找到基于JavaFX的桌面宠物项目,本项目完全由本人从头构思,搭建,并建立了合理的框架
- **便捷操作**:将整体的管理集成在托盘图标,方便用户使用。
- **可拓展性高**:在gitee上开源,接口规范,方便用户自定义
- **运行环境要求低**:将所需的 JavaFX 等依赖包打包进可执行 jar 包中,使用户能够在仅安装JRE21,无需安装 JavaFX 等依赖包的情况下运行程序。
## 6. 开发过程中遇到的挑战与解决方法
在项目开发过程中,面临了多种挑战,包括但不限于:
1. 宠物动态显示
+ 使用gif规避了复杂的图片读取逻辑
2. 动态图像的裁剪与编辑
+ 使用了ezgif,稿定在线ps等网站实现了宠物的剪辑
3. 不同分辨率下宠物大小不一致
+ 通过按照屏幕比例缩放,保证宠物大小合理
4. 实现托盘图标时,JAVAFX和String不兼容
+ 使用jar包隔离环境
## 7.开发日志
+ 23.11.29 新建文件夹 Complete!
+ 23.11.29 开始测试部署live2d
+ 22.11.30 简单的学习了一下live2d的模型的制作
+ 23.12.1 确认live2d不支持Java在windows下部署
+ 23.12.2 转使用JavaFX,搭建基本环境
+ 23.12.6 实现桌面显示宠物图像
+ 23.12.7 实现宠物拖动
+ 23.12.7 解决了宠物拖动时鼠标自动跳转到中心位置的问题,使宠物拖动能够点哪拖哪,同时除去了界面边框和背景
+ 23.12.14 更改项目架构,将Image单独设置为一个类,实现了宠物图片定时随机更换,但存在内存未及时回收的问题
+ 23.12.18 更改项目架构,预留接口,准备添加对话气泡
+ 23.12.19 绘制对话气泡完成,准备封装接口
+ 23.12.23 实现对话气泡跟随人物移动
+ 23.12.24 实现桌面托盘图标
+ 23.12.25 实现宠物切换,更改结构
## 总结
### 遗憾
+ 虽然实现了基本功能,但是因为没有相关开源,大部分时间都花在了框架的更新改动上,每加一个基础功能都需要重新整合
+ 目前已经实现了主要的基础功能,相关接口也比较合理,所想要的天气预报,日程整理等功能完全可以在只调用宠物接口而不更改宠物代码的基础上实现
+ 但是时间不够,所以只搭建了基本的框架
+ JAVAFX用作桌面UI制作还是不如QT等其他框架
### 感悟
+ 通过项目的实践,对JAVA面向对象的特性有了更深刻的理解
### 建议
+ 个人并没有从JAVAFX上感受到其功能的优越,反而是花费大量时间寻找相关资料
+ 是否可以侧重于其他JAVA的特长