|
|
@@ -8,6 +8,9 @@ export class ButtonManager extends Component {
|
|
|
@property({ type: [Button], displayName: "按钮数组" })
|
|
|
public buttons: Button[] = [];
|
|
|
|
|
|
+ // 存储每个按钮的原始缩放值
|
|
|
+ private buttonOriginalScales: Map<Node, Vec3> = new Map();
|
|
|
+
|
|
|
// 动画参数
|
|
|
private readonly SCALE_REDUCTION = 0.15; // 缩放减少量
|
|
|
private readonly ANIMATION_DURATION = 0.1; // 动画持续时间
|
|
|
@@ -38,12 +41,13 @@ export class ButtonManager extends Component {
|
|
|
private initButtonEvents() {
|
|
|
this.buttons.forEach((button, index) => {
|
|
|
if (button && button.node) {
|
|
|
+ // 存储按钮的原始缩放值
|
|
|
+ this.buttonOriginalScales.set(button.node, button.node.scale.clone());
|
|
|
+
|
|
|
// 添加点击事件监听
|
|
|
button.node.on(Button.EventType.CLICK, () => {
|
|
|
this.playClickAnimation(button.node);
|
|
|
}, this);
|
|
|
-
|
|
|
- // 不强制设置初始缩放,保持按钮原有缩放
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
@@ -58,18 +62,26 @@ export class ButtonManager extends Component {
|
|
|
// 停止之前的动画
|
|
|
Tween.stopAllByTarget(buttonNode);
|
|
|
|
|
|
- // 获取当前缩放值
|
|
|
- const currentScale = buttonNode.scale;
|
|
|
- const originalScale = currentScale.clone();
|
|
|
+ // 获取按钮的原始缩放值
|
|
|
+ const originalScale = this.buttonOriginalScales.get(buttonNode);
|
|
|
+ if (!originalScale) {
|
|
|
+ // 如果没有存储原始缩放值,则使用当前缩放值作为原始值
|
|
|
+ const currentScale = buttonNode.scale.clone();
|
|
|
+ this.buttonOriginalScales.set(buttonNode, currentScale);
|
|
|
+ return this.playClickAnimation(buttonNode);
|
|
|
+ }
|
|
|
|
|
|
- // 计算目标缩放值(当前缩放减去0.15)
|
|
|
+ // 先恢复到原始缩放,确保动画基准正确
|
|
|
+ buttonNode.scale = originalScale.clone();
|
|
|
+
|
|
|
+ // 计算目标缩放值(基于原始缩放减去0.15)
|
|
|
const targetScale = new Vec3(
|
|
|
- Math.max(0.1, currentScale.x - this.SCALE_REDUCTION), // 最小缩放限制为0.1
|
|
|
- Math.max(0.1, currentScale.y - this.SCALE_REDUCTION),
|
|
|
- currentScale.z
|
|
|
+ Math.max(0.1, originalScale.x - this.SCALE_REDUCTION), // 最小缩放限制为0.1
|
|
|
+ Math.max(0.1, originalScale.y - this.SCALE_REDUCTION),
|
|
|
+ originalScale.z
|
|
|
);
|
|
|
|
|
|
- // 创建缩放动画:先缩小,然后回到原来大小
|
|
|
+ // 创建缩放动画:先缩小,然后回到原始大小
|
|
|
tween(buttonNode)
|
|
|
.to(this.ANIMATION_DURATION, { scale: targetScale })
|
|
|
.to(this.ANIMATION_DURATION, { scale: originalScale })
|
|
|
@@ -86,11 +98,12 @@ export class ButtonManager extends Component {
|
|
|
|
|
|
// 为新添加的按钮设置事件
|
|
|
if (button.node) {
|
|
|
+ // 存储按钮的原始缩放值
|
|
|
+ this.buttonOriginalScales.set(button.node, button.node.scale.clone());
|
|
|
+
|
|
|
button.node.on(Button.EventType.CLICK, () => {
|
|
|
this.playClickAnimation(button.node);
|
|
|
}, this);
|
|
|
-
|
|
|
- // 不强制设置缩放,保持按钮原有缩放
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -105,6 +118,8 @@ export class ButtonManager extends Component {
|
|
|
// 移除事件监听
|
|
|
if (button.node) {
|
|
|
button.node.off(Button.EventType.CLICK, this.playClickAnimation, this);
|
|
|
+ // 清除存储的原始缩放值
|
|
|
+ this.buttonOriginalScales.delete(button.node);
|
|
|
}
|
|
|
|
|
|
this.buttons.splice(index, 1);
|
|
|
@@ -121,6 +136,8 @@ export class ButtonManager extends Component {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ // 清空原始缩放值存储
|
|
|
+ this.buttonOriginalScales.clear();
|
|
|
this.buttons = [];
|
|
|
}
|
|
|
}
|