# TowerDefence **Repository Path**: zxwu/TowerDefence ## Basic Information - **Project Name**: TowerDefence - **Description**: 基于cocos creator的塔防小游戏 - **Primary Language**: TypeScript - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-01-15 - **Last Updated**: 2026-01-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 项目介绍 ## 基于 Cocos Creator 3.x 开发的塔防游戏,包含多种塔类型、合成系统、Buff系统等完整玩法。 ## 相比verison1.2,本次更新(version2)更加完善的功能: - [x] 5种基础塔建造 - [x] 6种合成塔 - [x] 拖拽合成系统 - [x] 选择器UI - [x] Buff系统(灼烧/减速) - [x] 敌人Buff特效 - [x] 塔颜色区分 - [x] 升级动画系统 ## 操作流程 - 下载version2.0.1里面的两个压缩包,然后将library放到version2.0.1里面的version2文件夹下面,与assets同级 - 打开cocos dashboard,使用Cocos creator3.8.7,导入该项目 - 在场景找到level_1,双击打开,即可进行游戏 - 通关第一关后,点击下一关按钮,会进入Level_2(目前只做了两关的地图) - 更新的日志还是写在version的《一些说明》里面 - 下载version2.0.1的两个压缩包时,可以先不看assets,里面是一些详细的脚本,如果想快速搭建,按照上面说的做就行 设定: ## 塔类型系统 ### Lv.1 基础塔(可建造) | 塔类型 | 行为模式 | 说明 | | --- | --- | --- | | **弓箭塔** | 召唤Bowman | 弓箭手远程射击 | | **战士塔** | 召唤Warrior | 战士冲撞攻击,上限1/3/5 | | **坦克塔** | 召唤Tanker | 坦克阻挡敌人 | | **火法塔** | 直接射击 | 红色子弹 | | **水法塔** | 直接射击 | 蓝色子弹 | ### Lv.2+ 合成塔 | 塔类型 | 合成配方 | 行为模式 | 说明 | | --- | --- | --- | --- | | **巨石塔** | 战士+坦克 | 直接射击 | 大号子弹,高伤害 | | **火墙塔** | 火法+坦克 | 范围效果 | 红色范围+灼烧buff | | **水墙塔** | 水法+坦克 | 范围效果 | 蓝色范围+减速buff | | **毒塔** | 火法+水法 | 范围效果 | 紫色范围+持续伤害 | | **火箭塔** | 弓箭+火法 | 弓箭+Buff | 箭矢附带灼烧 | | **水箭塔** | 弓箭+水法 | 弓箭+Buff | 箭矢附带减速 | ## 核心脚本文件 ### 配置文件 - **TowerConfig.ts** 塔类型枚举、行为模式、数值配置、合成配方 ```tsx export enum TowerType { Warrior, Tank, MageFire, MageWater, Archer, Boulder, Firewall, Waterfall, Poison, EnchantFire, EnchantWater } export enum TowerBehavior { SummonBowman, SummonWarrior, SummonTanker, DirectShoot, AreaEffect, SummonBowmanBuff } ``` ### 核心逻辑 - **Tower.ts** 塔的主控制器,根据行为模式执行不同逻辑: - `init()` - 初始化塔属性 - `transformTo()` - 合成变形 - `performAttack()` - 根据行为模式攻击 - `shootBullet()` - 直接射击 - `spawnBowman()` - 召唤弓箭手 - `spawnWarrior()` / `spawnTanker()` - 召唤战士/坦克 - `initAreaEffect()` / `applyAreaEffect()` - 范围效果 - **TowerSelector.ts** 建造/合成选择器UI,支持: - 建造时选择塔类型 - 同类合成直接升级 - 异类合成弹出选择面板 - **MergeManager.ts** 合成管理器: - 高亮可合成目标 - 处理拖拽合成逻辑 - 执行合成结果 - **TowerDrag.ts** 塔拖拽组件,支持拖拽到其他塔上触发合成 ### 单位脚本 - **Bowman.ts** - 弓箭手,被动攻击(由Tower控制) - **Warrior.ts** - 战士单位 - 状态机:Idle → Charging → Returning - 敌人靠近时冲撞攻击 - **Tanker.ts** - 坦克单位 - 阻挡敌人移动 - 被敌人攻击直到死亡 - **Bullet.ts** - 子弹 - 追踪目标 - 支持设置颜色、大小 - 支持附带Buff ### Buff系统 - **BuffSystem.ts** ```tsx export enum BuffType { Burn = 'burn', // 灼烧:持续伤害 Slow = 'slow' // 减速:降低移动速度 } ``` - `addBurnBuff()` - 添加灼烧 - `addSlowBuff()` - 添加减速 - `updateBuffs()` - 更新Buff状态 - `getCurrentMoveSpeed()` - 获取减速后的速度 - **Enemy.ts** 集成Buff - 被灼烧时变红 - 被减速时变蓝 - 同时有两个buff时变紫 ### 动画 - **TowerAnimator.ts** - `playBuild()` - 建造动画 - `playUpgrade()` - 升级动画 → 切换到对应等级idle --- ## 数值配置表 ### 弓箭塔 | 等级 | 攻击力 | 攻速 | | --- | --- | --- | | Lv.1 | 1 | 1.0s | | Lv.2 | 1 | 0.75s | | Lv.3 | 2 | 0.75s | ### 战士塔 | 等级 | 攻击力 | 攻速 | 血量 | 上限 | | --- | --- | --- | --- | --- | | Lv.1 | 1 | 1.0s | 1 | 1 | | Lv.2 | 1 | 1.0s | 1 | 3 | | Lv.3 | 2 | 0.5s | 2 | 5 | ### 坦克塔 | 等级 | 血量 | 上限 | | --- | --- | --- | | Lv.1 | 2 | 1 | | Lv.2 | 3 | 3 | | Lv.3 | 4 | 5 | ### 法师塔(火/水) | 等级 | 攻击力 | 攻速 | | --- | --- | --- | | Lv.1 | 1 | 1.5s | | Lv.2 | 2 | 1.5s | | Lv.3 | 3 | 1.0s | ### 巨石塔 | 等级 | 攻击力 | 攻速 | | --- | --- | --- | | Lv.2 | 2 | 2.0s | | Lv.3 | 3 | 2.0s | | Lv.4 | 4 | 1.75s | --- ## 预制体结构 ### Tower.prefab Tower ├── Sprite (塔外观) ├── AreaEffect (范围效果圆圈,默认隐藏) └── [动态生成 Bowman] ``` ### Warrior.prefab / Tanker.prefab Warrior/Tanker └── Sprite + 对应脚本 ### Bullet.prefab Bullet └── Sprite + Bullet.ts ## 场景配置要点 1. **GameManager** 节点挂载 `GameWorld.ts` 2. **MergeManager** 需要拖入: - `buildAreas` - 所有建造区域 - `towerSelector` - 选择器UI 3. **Tower** 预制体需要拖入: - `bowmanPrefab` - `bulletPrefab` - `warriorPrefab` - `tankerPrefab` - `areaEffectNode` - `waypoints` 4. **BuildArea** 需要设置 `towerSelector` 引用 ## 颜色配置 ```tsx const TOWER_COLORS = { Warrior: 淡黄 (255, 240, 200), Tank: 深灰 (80, 80, 80), MageFire: 红色 (255, 100, 100), MageWater: 蓝色 (100, 150, 255), Archer: 白色 (255, 255, 255), Boulder: 土黄 (180, 150, 100), Firewall: 深红 (255, 80, 50), Waterfall: 深蓝 (80, 120, 255), Poison: 紫色 (150, 50, 200), EnchantFire: 橙红 (255, 150, 100), EnchantWater:浅蓝 (100, 200, 255), }