读一读

对需要定位放置的物体添加Widget组件,可以勾选指定上下左右相对父物体的位置,这个位置信息可以是px也可以是%

image.png


const {ccclass, property} = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {

    @property(cc.Node)
    particle:cc.Node = null

    toggleParticlePlay() 
    {
        let myParticle:cc.ParticleSystem = this.particle.getComponent(cc.ParticleSystem);
        if (myParticle.particleCount > 0) {
            myParticle.stopSystem(); //停止播放粒子
        } else {
            myParticle.resetSystem(); //粒子效果重新播放
        }
    }
}

设置Sprite的Type为SIMPLE,SizeMode为TRIMMED,此时就会自动将原图片四周的透明度剔除掉,得到比较好的节点宽度和高度。

image.png


设置Type为TILED模式之后,只需要修改Node的宽度高度就可以将图片平铺到这个范围中。

image.png


九宫格模式适用于按钮等,可以通过双击图片打开编辑器设置九宫格的范围

image.png

image.png


设置Sprite的Type为FILLED模式,就可以制作一种倒计时进度条的效果,FillType可以设置为圆形,水平,垂直等

image.png

const {ccclass, property} = cc._decorator;

@ccclass
export default class t_FilledSpriteControl extends cc.Component {

    speed = 0.1

    @property(cc.Sprite)
    horizontal:cc.Sprite = null

    @property(cc.Sprite)
    vertical:cc.Sprite = null

    @property(cc.Sprite)
    radial_round:cc.Sprite = null

    @property(cc.Sprite)
    radial_semicircle:cc.Sprite = null

    update (dt) {
        this._updataFillStart(this.horizontal, dt);
        this._updataFillStart(this.vertical, dt);
        
        this._updateFillRange(this.radial_round, 1, dt);
        this._updateFillRange(this.radial_semicircle, 0.5, dt);
    }

    _updataFillStart (sprite, dt) {
        var fillStart = sprite.fillStart;
        fillStart = fillStart > 0 ? fillStart -= (dt * this.speed) : 1;
        sprite.fillStart = fillStart; //控制水平垂直的进度
    }

    _updateFillRange (sprite, range, dt) {
        var fillRange = sprite.fillRange;
        fillRange = fillRange < range ? fillRange += (dt * this.speed) : 0;
        sprite.fillRange = fillRange; //控制圆形的进度
    }
}

const {ccclass, property} = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {

    private _colorChanged:boolean = false

    changeColor()
    {
        //同一图片 不同颜色 不增加DC
        this.node.color = this._colorChanged ? cc.Color.WHITE : cc.Color.RED;
        this._colorChanged = !this._colorChanged;
    }
    
}

const {ccclass, property} = cc._decorator;

@ccclass
export default class t_AR extends cc.Component {

    @property(cc.Label)
    posAR:cc.Label

    @property(cc.Label)
    pos: cc.Label

    @property(cc.Node)
    goldAR: cc.Node

    @property(cc.Node)
    gold: cc.Node

    onLoad () 
    {
        let sheep = this.goldAR.parent;
        let posAR = sheep.convertToWorldSpaceAR(cc.v2(this.goldAR.x, this.goldAR.y)); //本地坐标转换到世界坐标 关联锚点
        this.posAR.string = '(' + posAR.x.toFixed(0) + ', ' + posAR.y.toFixed(0) + ')'; //保留整数显示
        
        sheep = this.goldAR.parent;
        let pos = sheep.convertToWorldSpace(cc.v2(this.gold.x, this.gold.y )); //本地坐标转换到世界坐标 不关联锚点
        this.pos.string = '(' + pos.x.toFixed(0) + ', ' +pos.y.toFixed(0) + ')';
    }
}

对于一些一张张散乱的图片,不方便打包成图集的,可以使用这个自动图集策略,将散乱的SpriteFrame放在同一个文件夹中,然后再这个文件夹中右键-》新建-》自动图集配置,然后在属性检查器中配置参数,可以点击预览查看打包的图集,自动图集会把当前文件夹所有的SpriteFrame打包成一个图集,真正打包成图集的是在构建的时候,可以在构建完后的res/raw-assets下查看图集是否生成成功。


const {ccclass, property} = cc._decorator;

@ccclass
export default class PoolStudy extends cc.Component {

    somePool:cc.NodePool = null

    start () 
    {
        this.somePool = new cc.NodePool()

        for(let i = 0;i<10;i++)
        {
            let node = new cc.Node()
            this.somePool.put(node) //将对象放入对象池
        }

        if(this.somePool.size() > 0)
        {
            //从对象池中获取对象
            let getNode = this.somePool.get()
        }
    }

    onDestroy()
    {
        //清空对象池
        this.somePool.clear()
    }
}