123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- 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) {
- }
- // 排列杯子
- arrangeCups() {
- const startX = 40; //水杯的宽度一半
- const spacing = 80;
- this.cups.forEach((cup, index) => {
- cup.setPosition(startX + index * spacing, 0, 0);
- });
- }
- addCup(cup: Node) {
- cup.setParent(this.outNodes);
- this.arrangeCups();
- }
- removeCup(cup: Node) {
- cup.removeFromParent();
- this.arrangeCups();
- }
- getCups() {
- return this.cups;
- }
- // 添加带动画排列方法
- arrangeCupsWithAnimation() {
- const startX = -200; // 从左侧开始
- const spacing = 120; // 正间距向右排列
- this.cups.forEach((cup, index) => {
- const targetPos = new Vec3(startX + index * spacing, 0, 0);
- if (!cup.position.equals(targetPos)) {
- tween(cup)
- .to(0.3, { position: targetPos }, { easing: 'sineOut' })
- .start();
- }
- });
- }
- }
|