版本1.8.1
请教个问题
b是a的子节点,b开始是隐藏的。
当a触发mousemove后,b显示,a背景变红。
当a触发mouseleave后,b隐藏,a背景还原。
但是当b触发mousemove时,a就默认mouseleave了。
不知道该怎么解决。
我需要实现的是,不管b和a哪个mousemove,a背景都要变红,b显示。
请大家帮忙看下。
版本1.8.1
请教个问题
b是a的子节点,b开始是隐藏的。
当a触发mousemove后,b显示,a背景变红。
当a触发mouseleave后,b隐藏,a背景还原。
但是当b触发mousemove时,a就默认mouseleave了。
不知道该怎么解决。
我需要实现的是,不管b和a哪个mousemove,a背景都要变红,b显示。
请大家帮忙看下。
你可以通过记录两个node的鼠标悬停状态,然后统一处理显示效果。
const { ccclass, property } = cc._decorator;
@ccclass
export default class Test extends cc.Component {
@property(cc.Node)
nodeA: cc.Node = null;
@property(cc.Node)
nodeB: cc.Node = null;
// 记录颜色
activeColor: cc.Color = new cc.Color(255, 0, 0, 255);
inactiveColor: cc.Color = new cc.Color(0, 0, 255, 255);
// 记录两个node的悬浮状态
hoveringA: boolean = false;
hoveringB: boolean = false;
start() {
// 绑定事件
this.nodeA.on(cc.Node.EventType.MOUSE_MOVE, this.onMoveA, this);
this.nodeB.on(cc.Node.EventType.MOUSE_MOVE, this.onMoveB, this);
this.nodeA.on(cc.Node.EventType.MOUSE_LEAVE, this.onLeaveA, this);
this.nodeB.on(cc.Node.EventType.MOUSE_LEAVE, this.onLeaveB, this);
this.nodeB.active = false;
}
onMoveA() {
this.hoveringA = true;
this.updateState();
}
onMoveB() {
this.hoveringB = true;
this.updateState();
}
onLeaveA() {
this.hoveringA = false;
this.updateState();
}
onLeaveB() {
this.hoveringB = false;
this.updateState();
}
// 统一处理鼠标移入、移出事件
updateState() {
if (this.hoveringA || this.hoveringB) { // 鼠标悬浮任意元素
if (this.nodeA.color !== this.activeColor) {
this.nodeA.color = this.activeColor;
}
if (!this.nodeB.active) {
this.nodeB.active = true;
}
} else { // 鼠标移出所有元素
if (this.nodeA.color !== this.inactiveColor) {
this.nodeA.color = this.inactiveColor;
}
if (this.nodeB.active) {
this.nodeB.active = false;
}
}
}
}