|
|
@@ -66,12 +66,11 @@ export class BallController extends Component {
|
|
|
if (!this.placedBlocksContainer) {
|
|
|
this.placedBlocksContainer = find('Canvas/GameLevelUI/PlacedBlocks');
|
|
|
if (!this.placedBlocksContainer) {
|
|
|
- console.warn('找不到PlacedBlocks节点,某些功能可能无法正常工作');
|
|
|
+ // 找不到PlacedBlocks节点,某些功能可能无法正常工作
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 只进行初始设置,不创建小球
|
|
|
- console.log('🎮 BallController 已准备就绪,等待确定按钮触发');
|
|
|
this.calculateGameBounds();
|
|
|
|
|
|
// 延迟执行一些检查方法,但不创建小球
|
|
|
@@ -85,13 +84,11 @@ export class BallController extends Component {
|
|
|
// 获取GameArea节点
|
|
|
const gameArea = find('Canvas/GameLevelUI/GameArea');
|
|
|
if (!gameArea) {
|
|
|
- console.error('找不到GameArea节点');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
const gameAreaUI = gameArea.getComponent(UITransform);
|
|
|
if (!gameAreaUI) {
|
|
|
- console.error('GameArea节点没有UITransform组件');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -107,15 +104,12 @@ export class BallController extends Component {
|
|
|
this.gameBounds.right = worldPos.x + areaWidth / 2;
|
|
|
this.gameBounds.bottom = worldPos.y - areaHeight / 2;
|
|
|
this.gameBounds.top = worldPos.y + areaHeight / 2;
|
|
|
-
|
|
|
- console.log('GameArea Bounds:', this.gameBounds);
|
|
|
|
|
|
}
|
|
|
|
|
|
// 创建小球
|
|
|
createBall() {
|
|
|
if (!this.ballPrefab) {
|
|
|
- console.error('未设置Ball预制体');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -142,38 +136,26 @@ export class BallController extends Component {
|
|
|
const transform = this.activeBall.getComponent(UITransform);
|
|
|
if (transform) {
|
|
|
this.radius = transform.width / 2;
|
|
|
- console.log('小球半径设置为:', this.radius);
|
|
|
} else {
|
|
|
this.radius = 25; // 默认半径
|
|
|
- console.warn('无法获取小球UITransform组件,使用默认半径:', this.radius);
|
|
|
}
|
|
|
|
|
|
// 确保有碰撞组件
|
|
|
this.setupCollider();
|
|
|
|
|
|
// 注意:不在这里初始化方向,等待 startBall() 调用
|
|
|
- console.log('⏸️ 小球已创建但暂未开始运动,等待启动指令');
|
|
|
|
|
|
this.initialized = true;
|
|
|
- console.log('小球创建完成:', {
|
|
|
- position: this.activeBall.position,
|
|
|
- radius: this.radius,
|
|
|
- initialized: this.initialized,
|
|
|
- hasMovement: false // 表示尚未开始运动
|
|
|
- });
|
|
|
}
|
|
|
|
|
|
// 检查所有已放置方块的碰撞体组件
|
|
|
private checkBlockColliders() {
|
|
|
- console.log('🔍 === 检查方块碰撞体组件 ===');
|
|
|
|
|
|
if (!this.placedBlocksContainer) {
|
|
|
- console.log('❌ PlacedBlocks容器未设置');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (!this.placedBlocksContainer.isValid) {
|
|
|
- console.log('❌ PlacedBlocks容器已失效');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -185,34 +167,22 @@ export class BallController extends Component {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- console.log(`找到 ${blocks.length} 个方块`);
|
|
|
-
|
|
|
let fixedCount = 0;
|
|
|
|
|
|
for (let i = 0; i < blocks.length; i++) {
|
|
|
const block = blocks[i];
|
|
|
- console.log(`\n检查方块 ${i + 1}: ${block.name}`);
|
|
|
- console.log('方块路径:', this.getNodePath(block));
|
|
|
|
|
|
// 检查方块本身的碰撞体
|
|
|
const blockCollider = block.getComponent(Collider2D);
|
|
|
- console.log('方块有碰撞体:', !!blockCollider);
|
|
|
if (blockCollider) {
|
|
|
- console.log('碰撞体类型:', blockCollider.constructor.name);
|
|
|
- console.log('碰撞组:', blockCollider.group);
|
|
|
- console.log('碰撞标签:', blockCollider.tag);
|
|
|
- console.log('是否为传感器:', blockCollider.sensor);
|
|
|
-
|
|
|
// 🔧 自动修复碰撞组设置
|
|
|
if (blockCollider.group !== 2) {
|
|
|
- console.log(`🔧 修复方块碰撞组: ${blockCollider.group} -> 2`);
|
|
|
blockCollider.group = 2; // 设置为Block组
|
|
|
fixedCount++;
|
|
|
}
|
|
|
|
|
|
// 确保不是传感器
|
|
|
if (blockCollider.sensor) {
|
|
|
- console.log(`🔧 修复方块传感器设置: true -> false`);
|
|
|
blockCollider.sensor = false;
|
|
|
}
|
|
|
}
|
|
|
@@ -221,23 +191,15 @@ export class BallController extends Component {
|
|
|
const b1Node = block.getChildByName('B1');
|
|
|
if (b1Node) {
|
|
|
const b1Collider = b1Node.getComponent(Collider2D);
|
|
|
- console.log('B1子节点有碰撞体:', !!b1Collider);
|
|
|
if (b1Collider) {
|
|
|
- console.log('B1碰撞体类型:', b1Collider.constructor.name);
|
|
|
- console.log('B1碰撞组:', b1Collider.group);
|
|
|
- console.log('B1碰撞标签:', b1Collider.tag);
|
|
|
- console.log('B1是否为传感器:', b1Collider.sensor);
|
|
|
-
|
|
|
// 🔧 修复B1子节点的碰撞设置
|
|
|
if (b1Collider.group !== 2) {
|
|
|
- console.log(`🔧 修复B1碰撞组: ${b1Collider.group} -> 2`);
|
|
|
b1Collider.group = 2; // 设置为Block组
|
|
|
fixedCount++;
|
|
|
}
|
|
|
|
|
|
// 确保B1不是传感器(需要实际碰撞)
|
|
|
if (b1Collider.sensor) {
|
|
|
- console.log(`🔧 修复B1传感器设置: true -> false`);
|
|
|
b1Collider.sensor = false;
|
|
|
}
|
|
|
}
|
|
|
@@ -245,17 +207,10 @@ export class BallController extends Component {
|
|
|
|
|
|
// 检查Weapon子节点
|
|
|
const weaponNode = this.findWeaponNode(block);
|
|
|
- console.log('方块有Weapon节点:', !!weaponNode);
|
|
|
if (weaponNode) {
|
|
|
- console.log('Weapon节点路径:', this.getNodePath(weaponNode));
|
|
|
+ // 武器节点存在
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if (fixedCount > 0) {
|
|
|
- console.log(`✅ 已修复 ${fixedCount} 个碰撞组设置`);
|
|
|
- }
|
|
|
-
|
|
|
- console.log('🔍 === 方块碰撞体检查完成 ===');
|
|
|
}
|
|
|
|
|
|
// 随机位置小球
|
|
|
@@ -274,19 +229,16 @@ export class BallController extends Component {
|
|
|
// 获取GameArea节点
|
|
|
const gameArea = find('Canvas/GameLevelUI/GameArea');
|
|
|
if (!gameArea) {
|
|
|
- console.error('找不到GameArea节点');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 查找PlacedBlocks节点,它包含所有放置的方块
|
|
|
if (!this.placedBlocksContainer) {
|
|
|
- console.log('找不到PlacedBlocks节点,使用默认随机位置');
|
|
|
this.setRandomPositionDefault(minX, maxX, minY, maxY);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (!this.placedBlocksContainer.isValid) {
|
|
|
- console.log('PlacedBlocks容器已失效,使用默认随机位置');
|
|
|
this.setRandomPositionDefault(minX, maxX, minY, maxY);
|
|
|
return;
|
|
|
}
|
|
|
@@ -301,8 +253,6 @@ export class BallController extends Component {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- console.log(`找到 ${placedBlocks.length} 个已放置的方块`);
|
|
|
-
|
|
|
// 如果没有方块,使用默认随机位置
|
|
|
if (placedBlocks.length === 0) {
|
|
|
this.setRandomPositionDefault(minX, maxX, minY, maxY);
|
|
|
@@ -355,7 +305,6 @@ export class BallController extends Component {
|
|
|
|
|
|
// 如果找不到有效位置,使用默认位置(游戏区域底部中心)
|
|
|
if (!validPosition) {
|
|
|
- console.log(`尝试 ${maxAttempts} 次后未找到有效位置,使用默认位置`);
|
|
|
randomX = (this.gameBounds.left + this.gameBounds.right) / 2;
|
|
|
randomY = this.gameBounds.bottom + ballRadius + 50; // 底部上方50单位
|
|
|
}
|
|
|
@@ -363,14 +312,6 @@ export class BallController extends Component {
|
|
|
// 将世界坐标转换为相对于GameArea的本地坐标
|
|
|
const localPos = gameArea.getComponent(UITransform).convertToNodeSpaceAR(new Vec3(randomX, randomY, 0));
|
|
|
this.activeBall.position = localPos;
|
|
|
-
|
|
|
- console.log('小球位置已设置:', {
|
|
|
- worldX: randomX,
|
|
|
- worldY: randomY,
|
|
|
- localX: localPos.x,
|
|
|
- localY: localPos.y,
|
|
|
- overlapsWithBlock: !validPosition
|
|
|
- });
|
|
|
}
|
|
|
|
|
|
// 设置默认随机位置
|
|
|
@@ -388,24 +329,15 @@ export class BallController extends Component {
|
|
|
// 直接设置位置(不太准确,但作为后备)
|
|
|
this.activeBall.position = new Vec3(randomX - this.gameBounds.left, randomY - this.gameBounds.bottom, 0);
|
|
|
}
|
|
|
-
|
|
|
- console.log('使用默认随机位置设置小球:', {
|
|
|
- worldX: randomX,
|
|
|
- worldY: randomY
|
|
|
- });
|
|
|
}
|
|
|
|
|
|
// 设置碰撞组件
|
|
|
setupCollider() {
|
|
|
if (!this.activeBall) return;
|
|
|
|
|
|
- console.log('⚙️ === 开始设置小球碰撞组件 ===');
|
|
|
- console.log('小球节点:', this.activeBall.name);
|
|
|
-
|
|
|
// 确保小球有刚体组件
|
|
|
let rigidBody = this.activeBall.getComponent(RigidBody2D);
|
|
|
if (!rigidBody) {
|
|
|
- console.log('🔧 添加RigidBody2D组件...');
|
|
|
rigidBody = this.activeBall.addComponent(RigidBody2D);
|
|
|
rigidBody.type = 2; // Dynamic
|
|
|
rigidBody.gravityScale = 0; // 不受重力影响
|
|
|
@@ -414,9 +346,7 @@ export class BallController extends Component {
|
|
|
rigidBody.allowSleep = false; // 不允许休眠
|
|
|
rigidBody.linearDamping = 0; // 无线性阻尼,保持速度不衰减
|
|
|
rigidBody.angularDamping = 0; // 无角阻尼
|
|
|
- console.log('✅ RigidBody2D组件已添加');
|
|
|
} else {
|
|
|
- console.log('✅ RigidBody2D组件已存在,更新设置...');
|
|
|
// 确保已有的刚体组件设置正确
|
|
|
rigidBody.enabledContactListener = true;
|
|
|
rigidBody.gravityScale = 0;
|
|
|
@@ -428,7 +358,6 @@ export class BallController extends Component {
|
|
|
// 确保小球有碰撞组件
|
|
|
let collider = this.activeBall.getComponent(CircleCollider2D);
|
|
|
if (!collider) {
|
|
|
- console.log('🔧 添加CircleCollider2D组件...');
|
|
|
collider = this.activeBall.addComponent(CircleCollider2D);
|
|
|
collider.radius = this.radius || 25; // 使用已计算的半径或默认值
|
|
|
collider.tag = 1; // 小球标签
|
|
|
@@ -436,9 +365,7 @@ export class BallController extends Component {
|
|
|
collider.sensor = false; // 非传感器(实际碰撞)
|
|
|
collider.friction = 0; // 无摩擦
|
|
|
collider.restitution = 1; // 完全弹性碰撞
|
|
|
- console.log('✅ CircleCollider2D组件已添加');
|
|
|
} else {
|
|
|
- console.log('✅ CircleCollider2D组件已存在,更新设置...');
|
|
|
// 确保已有的碰撞组件设置正确
|
|
|
collider.sensor = false;
|
|
|
collider.restitution = 1;
|
|
|
@@ -446,15 +373,6 @@ export class BallController extends Component {
|
|
|
collider.tag = 1; // 确保标签正确
|
|
|
}
|
|
|
|
|
|
- console.log('🔧 小球碰撞组件设置完成:', {
|
|
|
- hasRigidBody: !!rigidBody,
|
|
|
- hasCollider: !!collider,
|
|
|
- radius: collider ? collider.radius : 'unknown',
|
|
|
- contactListener: rigidBody ? rigidBody.enabledContactListener : false,
|
|
|
- group: collider ? collider.group : 'unknown',
|
|
|
- tag: collider ? collider.tag : 'unknown'
|
|
|
- });
|
|
|
-
|
|
|
// === 使用全局回调监听器 ===
|
|
|
const physics = PhysicsManager.getInstance()?.getSystem();
|
|
|
if (physics) {
|
|
|
@@ -468,11 +386,7 @@ export class BallController extends Component {
|
|
|
physics.on(Contact2DType.END_CONTACT, this.onEndContact, this);
|
|
|
physics.on(Contact2DType.PRE_SOLVE, this.onPreSolve, this);
|
|
|
physics.on(Contact2DType.POST_SOLVE, this.onPostSolve, this);
|
|
|
- console.log('✅ 已注册全局碰撞监听器');
|
|
|
}
|
|
|
-
|
|
|
- console.log('✅ 小球碰撞组件设置完成');
|
|
|
- console.log('⚙️ === 碰撞组件设置完成 ===');
|
|
|
}
|
|
|
|
|
|
// 碰撞回调 - 简化版本用于测试
|
|
|
@@ -500,8 +414,6 @@ export class BallController extends Component {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- // Debug log removed
|
|
|
-
|
|
|
// 检查碰撞对象是否为方块
|
|
|
const nodeName = blockNode.name;
|
|
|
const nodePath = this.getNodePath(blockNode);
|
|
|
@@ -513,8 +425,6 @@ export class BallController extends Component {
|
|
|
nodePath.includes('Block') ||
|
|
|
hasWeaponChild;
|
|
|
|
|
|
- // Debug log removed
|
|
|
-
|
|
|
if (isBlock) {
|
|
|
// trigger bullet without verbose logging
|
|
|
// 计算碰撞世界坐标,默认用接触点
|
|
|
@@ -609,25 +519,18 @@ export class BallController extends Component {
|
|
|
*/
|
|
|
fireBullet(blockNode: Node) {
|
|
|
// Debug logs removed
|
|
|
- console.log('🔫 === 方块武器发射子弹流程 ===');
|
|
|
- console.log('激活的方块:', blockNode.name);
|
|
|
- console.log('方块路径:', this.getNodePath(blockNode));
|
|
|
|
|
|
// 检查子弹预制体是否存在
|
|
|
if (!this.bulletPrefab) {
|
|
|
- console.error('❌ 子弹预制体未设置');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 查找方块中的Weapon节点
|
|
|
- console.log('🔍 开始查找方块中的Weapon节点...');
|
|
|
const weaponNode = this.findWeaponNode(blockNode);
|
|
|
if (!weaponNode) {
|
|
|
- console.error('❌ 在方块中找不到Weapon节点:', blockNode.name);
|
|
|
const blockWorldPos = blockNode.worldPosition;
|
|
|
const weaponConfig2: WeaponConfig | null = (blockNode as any)['weaponConfig'] || null;
|
|
|
this.createAndFireBullet(blockWorldPos, weaponConfig2);
|
|
|
- console.log('🔫 === 方块武器发射子弹流程结束 ===');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -636,7 +539,6 @@ export class BallController extends Component {
|
|
|
try {
|
|
|
firePosition = weaponNode.worldPosition;
|
|
|
} catch (error) {
|
|
|
- console.error('❌ 获取武器坐标失败:', error);
|
|
|
// 备用方案:使用方块坐标
|
|
|
firePosition = blockNode.worldPosition;
|
|
|
}
|
|
|
@@ -644,8 +546,6 @@ export class BallController extends Component {
|
|
|
// 创建并发射子弹
|
|
|
const weaponConfig: WeaponConfig | null = (blockNode as any)['weaponConfig'] || null;
|
|
|
this.createAndFireBullet(firePosition, weaponConfig);
|
|
|
-
|
|
|
- console.log('🔫 === 方块武器发射子弹流程结束 ===');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -654,7 +554,6 @@ export class BallController extends Component {
|
|
|
* @param weaponConfig 武器配置
|
|
|
*/
|
|
|
private createAndFireBullet(firePosition: Vec3, weaponConfig: WeaponConfig | null) {
|
|
|
- console.log('🔫 === 开始创建子弹(新WeaponBullet系统)===');
|
|
|
|
|
|
// 确保武器配置加载
|
|
|
WeaponBullet.loadWeaponsData().then(() => {
|
|
|
@@ -663,7 +562,6 @@ export class BallController extends Component {
|
|
|
const finalConfig = weaponConfig || WeaponBullet.getWeaponConfig(defaultWeaponId);
|
|
|
|
|
|
if (!finalConfig) {
|
|
|
- console.error('❌ 无法获取武器配置');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -677,7 +575,6 @@ export class BallController extends Component {
|
|
|
|
|
|
// 验证初始化数据
|
|
|
if (!WeaponBullet.validateInitData(initData)) {
|
|
|
- console.error('❌ 子弹初始化数据无效');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -688,7 +585,6 @@ export class BallController extends Component {
|
|
|
// 查找GameArea(子弹统一添加到此节点)
|
|
|
const gameArea = find('Canvas/GameLevelUI/GameArea');
|
|
|
if (!gameArea) {
|
|
|
- console.error('❌ 找不到GameArea节点');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -698,12 +594,10 @@ export class BallController extends Component {
|
|
|
bullets.forEach(b => {
|
|
|
gameArea.addChild(b);
|
|
|
});
|
|
|
- console.log(`✅ 已创建多发子弹 (${bullets.length} 发)`);
|
|
|
} else {
|
|
|
// 单发逻辑(沿用原流程)
|
|
|
const bullet = instantiate(this.bulletPrefab);
|
|
|
if (!bullet) {
|
|
|
- console.error('❌ 子弹实例创建失败');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -715,48 +609,39 @@ export class BallController extends Component {
|
|
|
}
|
|
|
|
|
|
weaponBullet.init(initData);
|
|
|
- console.log('✅ 新子弹系统创建完成 (单发)');
|
|
|
}
|
|
|
-
|
|
|
- console.log('🔫 === 子弹创建完成 ===');
|
|
|
|
|
|
}).catch(error => {
|
|
|
- console.error('❌ 武器配置加载失败:', error);
|
|
|
+ // 武器配置加载失败
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 递归查找Weapon节点
|
|
|
private findWeaponNode(node: Node): Node | null {
|
|
|
// logs removed
|
|
|
- console.log(`🔍 在节点 ${node.name} 中查找Weapon...`);
|
|
|
|
|
|
// 先检查当前节点是否有Weapon子节点
|
|
|
const weaponNode = node.getChildByName('Weapon');
|
|
|
if (weaponNode) {
|
|
|
- console.log(`✅ 在 ${node.name} 中找到Weapon节点`);
|
|
|
return weaponNode;
|
|
|
}
|
|
|
|
|
|
// 如果没有,递归检查所有子节点
|
|
|
for (let i = 0; i < node.children.length; i++) {
|
|
|
const child = node.children[i];
|
|
|
- console.log(` 🔍 检查子节点: ${child.name}`);
|
|
|
const foundWeapon = this.findWeaponNode(child);
|
|
|
if (foundWeapon) {
|
|
|
- console.log(`✅ 在 ${child.name} 的子节点中找到Weapon`);
|
|
|
return foundWeapon;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 如果都没找到,返回null
|
|
|
- console.log(`❌ 在 ${node.name} 及其子节点中未找到Weapon`);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
// 辅助方法:打印节点结构
|
|
|
private logNodeStructure(node: Node, depth: number) {
|
|
|
const indent = ' '.repeat(depth);
|
|
|
- console.log(`${indent}${node.name}`);
|
|
|
for (let i = 0; i < node.children.length; i++) {
|
|
|
this.logNodeStructure(node.children[i], depth + 1);
|
|
|
}
|
|
|
@@ -837,47 +722,25 @@ export class BallController extends Component {
|
|
|
}
|
|
|
|
|
|
if (nearestBlock && nearestDistance < 100) {
|
|
|
- console.log(`⚠️ 小球接近方块但无物理碰撞: 距离=${nearestDistance.toFixed(1)}, 方块=${nearestBlock.name}`);
|
|
|
- console.log('小球位置:', ballPos);
|
|
|
- console.log('方块位置:', nearestBlock.worldPosition);
|
|
|
-
|
|
|
// 检查小球的碰撞体状态
|
|
|
- console.log('=== 小球碰撞体详细检查 ===');
|
|
|
const ballCollider = this.activeBall.getComponent(Collider2D);
|
|
|
- console.log('小球有碰撞体:', !!ballCollider);
|
|
|
if (ballCollider) {
|
|
|
- console.log('小球碰撞体类型:', ballCollider.constructor.name);
|
|
|
- console.log('小球碰撞组:', ballCollider.group);
|
|
|
- console.log('小球碰撞标签:', ballCollider.tag);
|
|
|
- console.log('小球是否为传感器:', ballCollider.sensor);
|
|
|
- console.log('小球碰撞体是否启用:', ballCollider.enabled);
|
|
|
if (ballCollider instanceof CircleCollider2D) {
|
|
|
- console.log('小球碰撞半径:', ballCollider.radius);
|
|
|
+ // 小球碰撞半径检查
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 检查小球的刚体状态
|
|
|
const ballRigidBody = this.activeBall.getComponent(RigidBody2D);
|
|
|
- console.log('小球有刚体:', !!ballRigidBody);
|
|
|
if (ballRigidBody) {
|
|
|
- console.log('小球刚体类型:', ballRigidBody.type);
|
|
|
- console.log('小球刚体启用碰撞监听:', ballRigidBody.enabledContactListener);
|
|
|
- console.log('小球刚体是否启用:', ballRigidBody.enabled);
|
|
|
+ // 刚体状态检查
|
|
|
}
|
|
|
|
|
|
// 检查最近的方块碰撞体
|
|
|
- console.log('=== 方块碰撞体详细检查 ===');
|
|
|
const blockCollider = nearestBlock.getComponent(Collider2D);
|
|
|
- console.log('方块有碰撞体:', !!blockCollider);
|
|
|
if (blockCollider) {
|
|
|
- console.log('方块碰撞体类型:', blockCollider.constructor.name);
|
|
|
- console.log('方块碰撞组:', blockCollider.group);
|
|
|
- console.log('方块碰撞标签:', blockCollider.tag);
|
|
|
- console.log('方块是否为传感器:', blockCollider.sensor);
|
|
|
- console.log('方块碰撞体是否启用:', blockCollider.enabled);
|
|
|
+ // 方块碰撞体检查
|
|
|
}
|
|
|
-
|
|
|
- // (已移除碰撞矩阵与物理引擎状态的冗余调试输出)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -897,15 +760,11 @@ export class BallController extends Component {
|
|
|
const mask1 = collisionMatrix[group1.toString()];
|
|
|
const mask2 = collisionMatrix[group2.toString()];
|
|
|
|
|
|
- // (调试输出移除)
|
|
|
-
|
|
|
// 检查group1是否能与group2碰撞
|
|
|
const canCollide1to2 = mask1 && (mask1 & (1 << group2)) !== 0;
|
|
|
// 检查group2是否能与group1碰撞
|
|
|
const canCollide2to1 = mask2 && (mask2 & (1 << group1)) !== 0;
|
|
|
|
|
|
- // (调试输出移除)
|
|
|
-
|
|
|
return canCollide1to2 && canCollide2to1;
|
|
|
}
|
|
|
|
|
|
@@ -916,8 +775,6 @@ export class BallController extends Component {
|
|
|
this.direction.x = Math.cos(angle);
|
|
|
this.direction.y = Math.sin(angle);
|
|
|
this.direction.normalize();
|
|
|
-
|
|
|
- console.log('Ball initialized with direction:', this.direction);
|
|
|
|
|
|
// 设置初始速度
|
|
|
if (this.activeBall) {
|
|
|
@@ -927,16 +784,12 @@ export class BallController extends Component {
|
|
|
this.direction.x * this.speed,
|
|
|
this.direction.y * this.speed
|
|
|
);
|
|
|
- console.log('Ball initial velocity set:', rigidBody.linearVelocity);
|
|
|
- } else {
|
|
|
- console.error('无法找到小球的RigidBody2D组件');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 初始化球的参数 - 公开方法,供GameManager调用
|
|
|
public initialize() {
|
|
|
- console.log('🎮 === BallController 初始化 ===');
|
|
|
this.calculateGameBounds();
|
|
|
this.createBall();
|
|
|
|
|
|
@@ -944,13 +797,10 @@ export class BallController extends Component {
|
|
|
this.scheduleOnce(() => {
|
|
|
this.checkBlockColliders();
|
|
|
}, 0.5);
|
|
|
-
|
|
|
- console.log('🎮 === BallController 初始化完成 ===');
|
|
|
}
|
|
|
|
|
|
// 启动小球 - 公开方法,在确定按钮点击后调用
|
|
|
public startBall() {
|
|
|
- console.log('🚀 === 启动小球系统 ===');
|
|
|
|
|
|
// 如果还没有初始化,先初始化
|
|
|
if (!this.initialized) {
|
|
|
@@ -959,12 +809,10 @@ export class BallController extends Component {
|
|
|
|
|
|
// 确保小球存在且有效
|
|
|
if (!this.activeBall || !this.activeBall.isValid) {
|
|
|
- console.log('⚠️ 小球不存在,重新创建...');
|
|
|
this.createBall();
|
|
|
}
|
|
|
|
|
|
// 重新定位小球,避免与方块重叠
|
|
|
- console.log('📍 重新定位小球位置...');
|
|
|
this.positionBallRandomly();
|
|
|
|
|
|
// 确保物理组件设置正确
|
|
|
@@ -975,8 +823,6 @@ export class BallController extends Component {
|
|
|
|
|
|
// 设置运动状态
|
|
|
this.ballStarted = true;
|
|
|
-
|
|
|
- console.log('🚀 === 小球系统启动完成,开始运动 ===');
|
|
|
}
|
|
|
|
|
|
// 输出碰撞矩阵调试信息
|
|
|
@@ -992,37 +838,26 @@ export class BallController extends Component {
|
|
|
"5": 18
|
|
|
};
|
|
|
|
|
|
- // (调试输出移除)
|
|
|
-
|
|
|
// 测试Ball组(1)和Block组(2)是否能碰撞
|
|
|
const ballMask = collisionMatrix["1"]; // 39
|
|
|
const blockMask = collisionMatrix["2"]; // 6
|
|
|
|
|
|
const ballCanCollideWithBlock = (ballMask & (1 << 2)) !== 0; // 检查Ball能否与组2碰撞
|
|
|
const blockCanCollideWithBall = (blockMask & (1 << 1)) !== 0; // 检查Block能否与组1碰撞
|
|
|
-
|
|
|
- // (调试输出移除)
|
|
|
-
|
|
|
- // (调试输出移除)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 从给定世界坐标发射子弹
|
|
|
*/
|
|
|
private fireBulletAt(blockNode: Node, fireWorldPos: Vec3) {
|
|
|
- console.log('🔫 === 方块武器发射子弹流程 ===');
|
|
|
- console.log('激活的方块:', blockNode.name);
|
|
|
- console.log('方块路径:', this.getNodePath(blockNode));
|
|
|
|
|
|
// 检查子弹预制体是否存在
|
|
|
if (!this.bulletPrefab) {
|
|
|
- console.error('❌ 子弹预制体未设置');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 直接使用碰撞世界坐标作为发射点
|
|
|
const weaponConfig: WeaponConfig | null = (blockNode as any)['weaponConfig'] || null;
|
|
|
this.createAndFireBullet(fireWorldPos, weaponConfig);
|
|
|
- console.log('🔫 === 方块武器发射子弹流程结束 ===');
|
|
|
}
|
|
|
}
|