// 程序入口
class GameMain{
private round:Laya.Sprite; //控制圆
private hero:Laya.Sprite; //人物
private direction:Laya.Sprite; //方向圆
private speed:number = 0;
private angle:number;
private centerX:number = -1;
private centerY:number = -1;
constructor()
{
Laya.init(1027,800);
Laya.stage.on(Laya.Event.MOUSE_DOWN,this,this.mouseDown);
Laya.stage.on(Laya.Event.MOUSE_UP,this,this.mouseUp);
this.round = new Laya.Sprite;
this.direction = new Laya.Sprite;
this.hero = new Laya.Sprite;
this.hero.graphics.drawPoly(Laya.stage.width/2, Laya.stage.height/2, [0, 100, 50, 0, 100, 100], "#ffff00");
this.hero.pivot(50,50);
Laya.stage.addChild(this.round);
Laya.stage.addChild(this.direction);
Laya.stage.addChild(this.hero);
Laya.timer.frameLoop(1,this,this.heroMove);
}
mouseDown(){
this.direction.pos(Laya.stage.mouseX,Laya.stage.mouseY);
this.direction.graphics.drawCircle(0, 0, 5, "#0000ff");
this.round.graphics.drawCircle(Laya.stage.mouseX, Laya.stage.mouseY, 25, "#00ffff");
this.round.graphics.drawCircle(Laya.stage.mouseX, Laya.stage.mouseY, 3, "#ffffff");
this.centerX = Laya.stage.mouseX;
this.centerY = Laya.stage.mouseY;
Laya.stage.on(Laya.Event.MOUSE_MOVE,this,this.mouseMove);
}
mouseUp(){
Laya.stage.off(Laya.Event.MOUSE_MOVE,this,this.mouseMove);
this.speed = 0;
this.round.graphics.clear();
this.direction.graphics.clear();
}
mouseMove(e:MouseEvent){
if(this.centerX>=0&&this.centerY>=0){
//计算两点距离 如果超过一定距离 就停留在距离最大值处
let dis = this.dis(this.centerX,this.centerY,Laya.stage.mouseX,Laya.stage.mouseY);
if(dis>20){
this.direction.pos(this.centerX + Math.cos(this.angle)*20,this.centerY + Math.sin(this.angle)*20);
}else{
this.direction.pos(Laya.stage.mouseX,Laya.stage.mouseY);
}
//如果距离太小 就代表没动
if(dis>3){
this.speed = 3; //此处还可以通过距离 控制速度
}else{
this.speed = 0;
}
}
}
heroMove(){
if(this.speed>0){
let dx:number = Laya.stage.mouseX - this.centerX;
let dy:number = Laya.stage.mouseY - this.centerY;
this.angle = Math.atan2(dy,dx);
this.hero.x += Math.cos(this.angle)*this.speed;
this.hero.y += Math.sin(this.angle)*this.speed;
}
}
dis(centerX,centerY,mouseX,mouseY){
let dx:number = centerX - mouseX;
let dy:number = centerY - mouseY;
let distance:number = Math.sqrt(dx*dx+dy*dy);
return distance;
}
}
new GameMain();
有时间将会对这个轮盘进行封装和美化!