Files
whale-town/DEVELOPER_GUIDE.md
2025-12-06 17:33:14 +08:00

6.4 KiB

开发者技术文档

项目架构

客户端架构

Main (Node)
├─ NetworkManager (Node) - 网络连接管理
├─ GameStateManager (Node) - 游戏状态管理
├─ UILayer (CanvasLayer) - UI 层
│  ├─ LoginScreen (Control) - 登录界面
│  ├─ CharacterCreation (Control) - 角色创建界面
│  ├─ HUD (Control) - 游戏内 UI
│  └─ DialogueBox (Control) - 对话框
└─ GameWorld (Node2D) - 游戏世界
   ├─ TileMap (TileMap) - 场景地图
   ├─ Characters (Node2D) - 角色容器
   │  ├─ PlayerCharacter (CharacterBody2D) - 本地玩家
   │  └─ RemoteCharacter (CharacterBody2D) - 其他角色
   └─ Camera (Camera2D) - 摄像机

服务器架构

WebSocket Server (Node.js + TypeScript)
├─ ConnectionManager - 管理客户端连接
├─ AuthenticationService - 身份验证
├─ CharacterManager - 角色管理
├─ WorldState - 世界状态管理
├─ MessageRouter - 消息路由
├─ AdminAPI - 管理接口
├─ BackupManager - 备份管理
├─ LogManager - 日志管理
└─ HealthChecker - 健康检查

核心系统

网络管理器 (NetworkManager)

职责: 管理客户端与服务器的 WebSocket 连接

主要方法:

func connect_to_server(url: String) -> void
func disconnect_from_server() -> void
func send_message(message: Dictionary) -> void
func is_connected() -> bool

信号:

  • connected_to_server() - 连接成功
  • disconnected_from_server() - 断开连接
  • connection_error(error: String) - 连接错误
  • message_received(message: Dictionary) - 收到消息

角色控制器 (CharacterController)

职责: 处理角色的移动、动画和状态

主要属性:

var character_id: String
var character_name: String
var is_online: bool
var move_speed: float = 200.0

主要方法:

func move_to(direction: Vector2) -> void
func set_position_smooth(target_pos: Vector2) -> void
func play_animation(anim_name: String) -> void
func set_online_status(online: bool) -> void

对话系统 (DialogueSystem)

职责: 管理角色之间的对话交互

主要方法:

func start_dialogue(target_character_id: String) -> void
func send_message(message: String) -> void
func end_dialogue() -> void
func show_bubble(character_id: String, message: String, duration: float) -> void

信号:

  • dialogue_started(character_id: String)
  • dialogue_ended()
  • message_received(sender: String, message: String)

数据模型

角色数据

{
  "id": "unique_character_id",
  "name": "角色名称",
  "owner_id": "player_account_id",
  "position": {
    "x": 100.0,
    "y": 200.0
  },
  "is_online": true,
  "appearance": {
    "head_color": "#F5DEB3",
    "body_color": "#4169E1",
    "foot_color": "#8B4513"
  },
  "created_at": 1234567890,
  "last_seen": 1234567890
}

消息协议

所有消息使用 JSON 格式:

{
  "type": "message_type",
  "data": {},
  "timestamp": 1234567890
}

消息类型:

  • auth_request / auth_response - 身份验证
  • character_create - 创建角色
  • character_move - 角色移动
  • character_state - 角色状态更新
  • dialogue_send - 发送对话
  • world_state - 世界状态同步
  • friend_request - 好友请求
  • private_message - 私聊消息

扩展功能

角色外观自定义

组件:

  • CharacterCustomization.gd - 外观自定义管理
  • CharacterPersonalization.gd - 个性化设置
  • CharacterProfile.gd - 角色档案

外观数据结构:

{
  "head_color": "#F5DEB3",
  "body_color": "#4169E1",
  "foot_color": "#8B4513",
  "created_at": 1234567890,
  "version": "1.0"
}

社交系统

组件:

  • FriendSystem.gd - 好友管理
  • PrivateChatSystem.gd - 私聊功能
  • RelationshipNetwork.gd - 关系网络
  • SocialManager.gd - 社交管理器

安全系统

组件:

  • SecurityManager.gd - 安全管理
  • RateLimiter.gd - 速率限制
  • DialogueFilter.gd - 对话过滤

速率限制配置:

{
  "max_requests": 10,
  "time_window": 60.0,  # 秒
  "cooldown": 5.0       # 秒
}

添加新功能

1. 创建规格文档

.kiro/specs/ 创建新目录:

.kiro/specs/your-feature/
├── requirements.md  # 需求和验收标准
├── design.md        # 架构和设计
└── tasks.md         # 实施计划

2. 实现功能

创建必要的脚本和场景:

scripts/YourFeature.gd
scenes/YourFeature.tscn

3. 编写测试

创建测试文件:

tests/test_your_feature.gd

4. 集成到主系统

Main.gd 或相关管理器中集成新功能。

代码规范

命名约定

  • 变量和函数: snake_case
  • 类名: PascalCase
  • 常量: UPPER_CASE
  • 私有变量: _leading_underscore

注释规范

## 类文档注释
## 描述类的用途和职责
class_name MyClass

## 函数文档注释
## 参数:
##   - param1: 参数描述
## 返回: 返回值描述
func my_function(param1: String) -> int:
    # 行内注释
    return 0

信号定义

## 当某事件发生时触发
signal event_happened(data: Dictionary)

性能优化

对象池

使用对象池减少内存分配:

var object_pool: Array = []

func get_object():
    if object_pool.is_empty():
        return create_new_object()
    return object_pool.pop_back()

func return_object(obj):
    object_pool.append(obj)

网络优化

  • 使用消息批处理
  • 实现状态差异同步
  • 减少不必要的网络请求

渲染优化

  • 使用视锥剔除
  • 优化碰撞检测
  • 减少节点数量

调试技巧

打印调试

print("Debug:", variable)
print_debug("Stack trace")

断点调试

在代码行号左侧点击设置断点,按 F5 运行调试模式。

性能分析

使用 Godot 内置的性能监视器:

Performance.get_monitor(Performance.TIME_FPS)
Performance.get_monitor(Performance.MEMORY_STATIC)

服务器 API

详细的服务器 API 文档请参考 server/README.md

相关文档