refactor(map): 将任务卡面板隐藏动画由位置移动改为缩放
将战斗阶段卡牌面板的隐藏方式从向下移动改为缩放至零,简化动画逻辑并避免因父节点缩放导致的偏移计算问题。移除不再使用的 cardsBattleHideOffsetY 属性,并缓存卡牌面板的原始缩放比例。
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -25,8 +25,6 @@ export class MissionCardComp extends CCComp {
|
|||||||
/** 四个插卡槽位(固定顺序分发:1~4) */
|
/** 四个插卡槽位(固定顺序分发:1~4) */
|
||||||
@property(Node)
|
@property(Node)
|
||||||
cards_node:Node = null!
|
cards_node:Node = null!
|
||||||
@property({ tooltip: "战斗阶段卡牌面板下移隐藏距离" })
|
|
||||||
cardsBattleHideOffsetY: number = 1280;
|
|
||||||
@property({ tooltip: "卡牌面板位移动画时长" })
|
@property({ tooltip: "卡牌面板位移动画时长" })
|
||||||
cardsPanelMoveDuration: number = 0.2;
|
cardsPanelMoveDuration: number = 0.2;
|
||||||
@property(Node)
|
@property(Node)
|
||||||
@@ -59,8 +57,10 @@ export class MissionCardComp extends CCComp {
|
|||||||
private poolLv: number = CARD_POOL_INIT_LEVEL;
|
private poolLv: number = CARD_POOL_INIT_LEVEL;
|
||||||
private readonly heroInfoItemGap: number = 86;
|
private readonly heroInfoItemGap: number = 86;
|
||||||
private heroInfoSyncTimer: number = 0;
|
private heroInfoSyncTimer: number = 0;
|
||||||
private cardsShowPos: Vec3 = new Vec3();
|
private hasCachedCardsBaseScale: boolean = false;
|
||||||
private cardsHidePos: Vec3 = new Vec3();
|
private cardsBaseScale: Vec3 = new Vec3(1, 1, 1);
|
||||||
|
private cardsShowScale: Vec3 = new Vec3(1, 1, 1);
|
||||||
|
private cardsHideScale: Vec3 = new Vec3(0, 0, 1);
|
||||||
private heroInfoItems: Map<number, {
|
private heroInfoItems: Map<number, {
|
||||||
node: Node,
|
node: Node,
|
||||||
model: HeroAttrsComp,
|
model: HeroAttrsComp,
|
||||||
@@ -296,11 +296,13 @@ export class MissionCardComp extends CCComp {
|
|||||||
|
|
||||||
private initCardsPanelPos() {
|
private initCardsPanelPos() {
|
||||||
if (!this.cards_node || !this.cards_node.isValid) return;
|
if (!this.cards_node || !this.cards_node.isValid) return;
|
||||||
const pos = this.cards_node.position;
|
if (!this.hasCachedCardsBaseScale) {
|
||||||
const parentScaleY = Math.max(0.001, Math.abs(this.cards_node.parent?.scale?.y ?? 1));
|
const scale = this.cards_node.scale;
|
||||||
const localOffsetY = Math.abs(this.cardsBattleHideOffsetY) / parentScaleY;
|
this.cardsBaseScale = new Vec3(scale.x, scale.y, scale.z);
|
||||||
this.cardsShowPos = new Vec3(pos.x, pos.y, pos.z);
|
this.hasCachedCardsBaseScale = true;
|
||||||
this.cardsHidePos = new Vec3(pos.x, pos.y - localOffsetY, pos.z);
|
}
|
||||||
|
this.cardsShowScale = new Vec3(this.cardsBaseScale.x, this.cardsBaseScale.y, this.cardsBaseScale.z);
|
||||||
|
this.cardsHideScale = new Vec3(0, 0, this.cardsBaseScale.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
private enterPreparePhase() {
|
private enterPreparePhase() {
|
||||||
@@ -308,7 +310,7 @@ export class MissionCardComp extends CCComp {
|
|||||||
this.initCardsPanelPos();
|
this.initCardsPanelPos();
|
||||||
this.cards_node.active = true;
|
this.cards_node.active = true;
|
||||||
Tween.stopAllByTarget(this.cards_node);
|
Tween.stopAllByTarget(this.cards_node);
|
||||||
this.cards_node.setPosition(this.cardsShowPos);
|
this.cards_node.setScale(this.cardsShowScale);
|
||||||
}
|
}
|
||||||
|
|
||||||
private enterBattlePhase() {
|
private enterBattlePhase() {
|
||||||
@@ -316,9 +318,10 @@ export class MissionCardComp extends CCComp {
|
|||||||
this.initCardsPanelPos();
|
this.initCardsPanelPos();
|
||||||
this.cards_node.active = true;
|
this.cards_node.active = true;
|
||||||
Tween.stopAllByTarget(this.cards_node);
|
Tween.stopAllByTarget(this.cards_node);
|
||||||
|
this.cards_node.setScale(this.cardsShowScale);
|
||||||
tween(this.cards_node)
|
tween(this.cards_node)
|
||||||
.to(this.cardsPanelMoveDuration, {
|
.to(this.cardsPanelMoveDuration, {
|
||||||
position: this.cardsHidePos
|
scale: this.cardsHideScale
|
||||||
})
|
})
|
||||||
.start();
|
.start();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user