const {ccclass, property} = cc._decorator;
let NodeItems = new Array();
@ccclass
export default class EffectOval extends cc.Component {
// LIFE-CYCLE CALLBACKS:
@property(cc.Node)
NodeItem : cc.Node;
/** 轴长a */
@property
a : number = 100;
/** 轴长b */
@property
b : number = 200;
onLoad () {
this.NodeItem.active = false;
}
start () {
this.DrawOval();
}
/**
* 获取椭圆上的坐标
*
* @param {*} angle
* @returns
* @memberof EffectOval
*/
GetOvalPosition(angle){
if(angle >= 360){
angle -= 360;
}
console.log("angle",angle);
let pos = cc.v2(0,0);
let tan = Math.tan(angle * 3.1415926 / 180);
pos.x = Math.sqrt(1.0/((1.0/Math.pow(tan,2))*(1.0/Math.pow(this.a,2))+(1.0/Math.pow(this.b,2))));
pos.y = Math.sqrt(1.0/(1.0/(Math.pow(this.a,2))+Math.pow(tan,2)*(1.0/Math.pow(this.b,2))));
if (angle < 90 || angle > 270){
pos.y = -pos.y;
}
if (angle > 180){
pos.x = -pos.x;
}
return pos;
}
/**
* 画椭圆
*
* @memberof EffectOval
*/
DrawOval(){
for(let i = 0;i < 360;){
let item = cc.instantiate(this.NodeItem);
item.active = true;
this.node.addChild(item);
item.position = this.GetOvalPosition(i);
let data = {
item : item,
angle :i
}
NodeItems.push(data);
i += 20;
}
}
update (dt) {
for(let i = 0;i < NodeItems.length;++i){
NodeItems[i].angle += dt * 10;
NodeItems[i].item.position = this.GetOvalPosition(NodeItems[i].angle);
}
}
}