12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import { _decorator, Component, Node, tween, Vec3 } from 'cc';
- const { ccclass, property, executeInEditMode } = _decorator;
- @ccclass('OutArea')
- @executeInEditMode
- export class OutArea extends Component {
- @property(Node)
- outNodes: Node = null!;
- // 直接使用outNodes的子节点管理
- get cups() {
- return this.outNodes.children;
- }
- start() {
- }
- update(deltaTime: number) {
- }
- // 修改排列方法为异步
- async arrangeCups() {
- const startX = 40;
- const spacing = 80;
- // 过滤掉已销毁的节点
- const validCups = this.cups.filter(cup => cup.isValid);
- await new Promise<void>(resolve => {
- let completed = 0;
- validCups.forEach((cup, index) => {
- const targetX = startX + index * spacing;
- tween(cup)
- .to(0.3, { position: new Vec3(targetX, 0, 0) }, { easing: 'sineOut' })
- .call(() => {
- if (++completed === validCups.length) resolve();
- })
- .start();
- });
- // 处理无动画的情况
- if (validCups.length === 0) resolve();
- });
- }
- addCup(cup: Node) {
- cup.setParent(this.outNodes);
- this.arrangeCups();
- }
- removeCup(cup: Node) {
- cup.removeFromParent();
- this.arrangeCups();
- }
- getCups() {
- return this.cups;
- }
- }
|