| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { _decorator, Component, Node, Vec3, RigidBody2D, Collider2D, Contact2DType, IPhysics2DContact, Sprite, find, Prefab, instantiate } from 'cc';
- import { BundleLoader } from '../../Core/BundleLoader';
- import { Audio } from '../../AudioManager/AudioManager';
- import EventBus, { GameEvents } from '../../Core/EventBus';
- import { EnemyProjectileInstance } from './EnemyProjectileInstance';
- const { ccclass, property } = _decorator;
- /**
- * 敌人抛掷物管理器
- * 负责管理敌人发射的抛掷物的创建和配置
- * 挂载到Canvas/GameLevelUI/EnemyController上使用
- */
- @ccclass('EnemyProjectile')
- export class EnemyProjectile extends Component {
-
- @property(Prefab)
- public projectilePrefab: Prefab = null;
-
- onLoad() {
- console.log('[EnemyProjectile] 敌人抛掷物管理器已加载');
- }
-
- /**
- * 创建抛掷物
- * @param config 抛掷物配置
- */
- public createProjectile(config: {
- damage: number;
- speed: number;
- direction: Vec3;
- projectileType: string;
- startPosition: Vec3;
- }): Node | null {
- console.log('[EnemyProjectile] 开始创建抛掷物,配置:', config);
-
- if (!this.projectilePrefab) {
- console.error('[EnemyProjectile] 抛掷物预制体未设置');
- return null;
- }
-
- console.log('[EnemyProjectile] 预制体已设置,开始实例化');
-
- // 实例化预制体
- const projectileNode = instantiate(this.projectilePrefab);
- if (!projectileNode) {
- console.error('[EnemyProjectile] 创建抛掷物节点失败');
- return null;
- }
-
- console.log('[EnemyProjectile] 抛掷物节点创建成功,节点名称:', projectileNode.name);
-
- // 获取抛掷物组件
- const projectileComponent = projectileNode.getComponent(EnemyProjectileInstance);
- if (!projectileComponent) {
- console.error('[EnemyProjectile] 预制体中未找到EnemyProjectileInstance组件');
- projectileNode.destroy();
- return null;
- }
-
- console.log('[EnemyProjectile] 找到EnemyProjectileInstance组件,开始初始化');
-
- // 初始化抛掷物
- projectileComponent.init(config);
-
- console.log('[EnemyProjectile] 抛掷物初始化完成,准备添加到Canvas');
-
- // 添加到Canvas
- const canvas = find('Canvas');
- if (canvas) {
- // 先添加到Canvas,然后设置世界坐标
- canvas.addChild(projectileNode);
-
- // 确保在Canvas坐标系下正确设置位置
- projectileNode.setWorldPosition(config.startPosition);
-
- console.log(`[EnemyProjectile] 创建抛掷物成功: 类型=${config.projectileType}, 伤害=${config.damage}, 速度=${config.speed}`);
- console.log('[EnemyProjectile] 抛掷物世界坐标:', projectileNode.worldPosition);
- console.log('[EnemyProjectile] 抛掷物本地坐标:', projectileNode.position);
- } else {
- console.error('[EnemyProjectile] 未找到Canvas节点');
- projectileNode.destroy();
- return null;
- }
-
- return projectileNode;
- }
- }
|