1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import { _decorator, Component, Input, input, Label, math, Node, Sprite, tween, v3 } from 'cc';
- import { Bundle } from '../enum/Bundle';
- import { EventType } from '../enum/EventType';
- import { AudioMgr } from '../manager/AudioMgr';
- import { EventMgr } from '../manager/EventMgr';
- import { ResMgr } from '../manager/ResMgr';
- import { LabelTick } from '../uiExtend/LabelTick';
- const { ccclass, property } = _decorator;
- @ccclass('UIItem/CoinItem')
- export class CoinItem extends Component {
- @property(LabelTick)
- private labelTick: LabelTick = null
- private coin: number = 0
- public get Coin() : number {
- return this.coin
- }
-
- protected onLoad(): void {
- EventMgr.emit(EventType.CoinItemShow, this)
- EventMgr.on(EventType.CoinItemShow, this.onShow, this)
- EventMgr.on(EventType.CoinItemHide, this.onHide, this)
- EventMgr.on(EventType.UpdateCoin, this.updateCoin, this)
- }
- protected onDisable(): void {
- this.unscheduleAllCallbacks()
- }
- protected onDestroy(): void {
- EventMgr.emit(EventType.CoinItemHide, this)
- this.unscheduleAllCallbacks()
- EventMgr.off(EventType.UpdateCoin, this.updateCoin, this)
- EventMgr.off(EventType.CoinItemShow, this.onShow, this)
- EventMgr.off(EventType.CoinItemHide, this.onHide, this)
- }
- private onShow(other: CoinItem): void {
- if (this === other) return
- this.node.active = false
- }
- private onHide(other: CoinItem): void {
- if (this === other) return
- this.node.active = true
- this.init(other.coin)
- }
- public init(coin: number): void {
- this.coin = coin
- this.labelTick.init(coin)
- }
- public updateCoin(coin: number, playAnim: boolean = true): void {
- if (!this.node.active) return
- this.coin = coin
- this.labelTick.tickLabel(coin)
- const rangeX: number = 50
- const rangeY: number = 100
- if (playAnim) {
- AudioMgr.playSfx('获得金币')
- this.schedule(() => {
- const flyCoin: Node = this.createFlyCoin()
- const posX: number = math.randomRangeInt(-rangeX, rangeX)
- const posY: number = math.randomRangeInt(-rangeY, -50)
- const tw = tween(flyCoin)
- tw.to(0.5, { position: v3(posX, posY) }, { easing: 'cubicOut' })
- tw.to(1, { position: this.node.position }, { easing: 'backIn' })
- tw.call(() => {
- AudioMgr.playSfx('获得金币1')
- flyCoin.destroy()
- })
- tw.start()
- }, 0.1, 5)
- }
- }
- public createFlyCoin(): Node {
- const flyCoin: Node = new Node()
- const sp: Sprite = flyCoin.addComponent(Sprite)
- sp.spriteFrame = ResMgr.getSpriteFrame(Bundle.UI, 'xingxing', 'common/')
- this.node.parent.addChild(flyCoin)
- return flyCoin
- }
- }
|