egret虚拟摇杆 写法

首先获取两个距离
p1为大小圆心 也就是画摇杆外圆与内圆的 xy
p2为鼠标当前坐标
取得距离dist

然后获得的dist如果小于大圆半径-小圆半径

  if(dist<=(100-40))

那么证明小圆此时在大圆里
将小球x坐标设为 当前鼠标坐标-圆心x的坐标(如果不减去圆心坐标会乱跑)
将小球y坐标设为 当前鼠标坐标-圆心y的坐标(如果不减去圆心坐标会乱跑)

如果大于(100-40)
需要获取角度

var angle:number = Math.atan2(e.stageY - 180, e.stageX - 360);

用鼠标当前坐标-圆心y
求得Math.atan2(Y, X);函数中的y
鼠标坐标-圆心x获得Math.atan2(Y, X);函数中的x

  小圆.x=Math.cos(angle)*(100-40);
     小圆.y=Math.sin(angle)*(100-40);

用求得的角度cos后求得x坐标 再乘100-40 保证不会超出大圆半径
用求得的角度cos后求得y坐标 再乘100-40 保证不会超出大圆半径

private p1:egret.Point = new egret.Point();
	private p2:egret.Point = new egret.Point();

   p2.x=e.stagex+360;
    p2.y=e.stagey+180;
    p1.x=360;
    p1.y=180;

   // console.log(180-angle6);
   console.log(sky.x+"sky.y"+sky.y);
timer.start();
    //
var dist = egret.Point.distance(p1, p2);
   var angle:number = Math.atan2(e.stageY - 180, e.stageX - 360);

    /
    
    //下面的是用来算小球的位置  而不是角色位置
   
 //console.log(dist);
   if(dist<=(100-40))
   {//e.stageY-nei.y>100){
    
        nei.x=nei.x;//如果在圆环内  小球的坐标等于鼠标当前坐标-小球初始坐标x

      nei.y=nei.y;//如果在圆环内 小球的坐标等于鼠标当前坐标-小秋初始坐标y
  //nei.x=Math.cos(dd*Math.PI/180)*60;//ji suan xiao yuan x 

      //  nei.y=Math.sin(dd*Math.PI/180)*60;// ji suan xiao yuan y
      //   this.ball.x = this.centerX + e.stageX - this.x;
       // sky.x=Math.cos(ang.jieguo)*10;
       // sky.y=Math.sin(ang.jieguo)*10;
   // myScroller.viewport.scrollV =Math.sin(angle6)*(100-nei.y)+180+nei.y*10 //纵向滚动的位置
            //myScroller.viewport.scrollH  =Math.cos(angle6)*(100-nei.x)+360+nei.x*10;//横向滚动的位置
      // nei.y=(nei.y-shpwai.y)/100;
    }
   else{
       // this.ball.x = Math.cos(angle)*(this.circleRadius - this.ballRadius) + this.centerX;
        nei.x=Math.cos(ang.jieguo)*(100-40);
     nei.y=Math.sin(ang.jieguo)*(100-40);
      //  myScroller.viewport.scrollV = Math.sin(angle6)*(100-nei.y)+180+nei.y*10//纵向滚动的位置
          //  myScroller.viewport.scrollH  =Math.cos(angle6)*(100-nei.x)+360+nei.x*10;//横向滚动的位置
    }

下面是移动角色 与地图
想让小球 地图不停移动需要加个定时器

var timer:egret.Timer=new egret.Timer(1,0);
        timer.addEventListener(egret.TimerEvent.TIMER,cont6,this);

摇杆被触摸后启动定时器



function cont6(){ 
    console.log(jiaodu);
    // this.removeChild(myScroller);
    

    ///
    ///
    //想让小秋移动 需要sin cos角度 乘速度 再加小球x y 
    //想让小球不停移动需要加个定时器
     sky.x=Math.cos(ang.jieguo)*10+sky.x;
        sky.y=Math.sin(ang.jieguo)*10+sky.y;//Math.cos(ang.jieguo)*10

         myScroller.viewport.scrollV =myScroller.viewport.scrollV+Math.sin(ang.jieguo)*10; //纵向滚动的位置
            myScroller.viewport.scrollH  =Math.cos(ang.jieguo)*10+myScroller.viewport.scrollH
       // enemy.x =enemy.x+6; //纵向滚动的位置
     //   this.addChild(myScroller);
  //  timer.start();

}

被移动的物体

  sky.x=Math.cos(ang.jieguo)*10+sky.x;
        sky.y=Math.sin(ang.jieguo)*10+sky.y;//Math.cos(ang.jieguo)*10

其中需要用到上面的角度angle

物体x=Math.cos(angle)*速度+物体x
物体y=Math.cos(angle)*速度+物体y

背景的移动

var group = new eui.Group();
        var img = new eui.Image("resource/assets/io.jpg");
        group.addChild(img);
        //创建一个Scroller
        var myScroller = new eui.Scroller();
        //注意位置和尺寸的设置是在Scroller上面,而不是容器上面
        myScroller.width = this.stage.stageWidth;
        myScroller.height = this.stage.stageHeight;
        //设置viewport
        myScroller.viewport = group;
        this.addChild(myScroller);



var timer:egret.Timer=new egret.Timer(1,0);
        timer.addEventListener(egret.TimerEvent.TIMER,cont6,this);
 var jiaodu=180-ang.jieguo;
function cont6(){ 
    console.log(jiaodu);
   
         myScroller.viewport.scrollV =myScroller.viewport.scrollV+Math.sin(ang.jieguo)*10; //纵向滚动的位置
            myScroller.viewport.scrollH  =Math.cos(ang.jieguo)*10+myScroller.viewport.scrollH
       // enemy.x =enemy.x+6; //纵向滚动的位置
     //   this.addChild(myScroller);
  //  timer.start();

}

停止移动
刚才的是不停移动 因为egret.TouchEvent.TOUCH_MOVE触发了计时器

下面用egret.TouchEvent.TOUCH_END停止计时器

 小圆.addEventListener(egret.TouchEvent.TOUCH_MOVE,onnei, this);


    
function onnei(e: egret.TouchEvent):void{
 
   if(e.stageX<=440||e.stageY<=240){//fang zhi bie de di fang di ji hou tong yang cao zuo yao gan
var xz=e.stageX;
var xy=e.stageY;
//console.log("xxxxxx"+xz+"yyyyyyyyyyyy"+xy);
nei.x=e.stageX-360;//rang zuo biao hui dao yuan xin
    nei.y=e.stageY-180;
    var xx=nei.x-shpwai.x;
    var zx=(xx)/100;
 ang.run(e.stageY,180, e.stageX,360);//=Math.atan2(nei.y-shpwai.y,nei.x-shpwai.x);
   p2.x=nei.x+360;
    p2.y=nei.y+180;
    p1.x=360;
    p1.y=180;
   
   // console.log(180-angle6);
   console.log(sky.x+"sky.y"+sky.y);
timer.start();
    //
var dist = egret.Point.distance(p1, p2);


    /
    
    //下面的是用来算小球的位置  而不是角色位置
   
 //console.log(dist);
   if(dist<=(100-40)){//e.stageY-nei.y>100){
    
       var dx:number=nei.x-360;//xian zai de dian dao yuan xin de x ju li
        var dy:number=nei.y-shpwai.y;//xian zai de dian dao yuan xin de y ju li
        var dixy=Math.atan2(dy,dx);// qiu de shi shang mian x y de jia jiao
        var dd=180*dixy/Math.PI;//jiang qiu de jiao du zhuan huan wei hu du
       var cc= Math.cos(dd*Math.PI/180)*6;
        console.log(cc+"//");
        console.log(nei.x+".....................");
        nei.x=nei.x;//如果在圆环内  小球的坐标等于鼠标当前坐标-小球初始坐标x

      nei.y=nei.y;//如果在圆环内 小球的坐标等于鼠标当前坐标-小秋初始坐标y
  //nei.x=Math.cos(dd*Math.PI/180)*60;//ji suan xiao yuan x 

      //  nei.y=Math.sin(dd*Math.PI/180)*60;// ji suan xiao yuan y
      //   this.ball.x = this.centerX + e.stageX - this.x;
       // sky.x=Math.cos(ang.jieguo)*10;
       // sky.y=Math.sin(ang.jieguo)*10;
   // myScroller.viewport.scrollV =Math.sin(angle6)*(100-nei.y)+180+nei.y*10 //纵向滚动的位置
            //myScroller.viewport.scrollH  =Math.cos(angle6)*(100-nei.x)+360+nei.x*10;//横向滚动的位置
      // nei.y=(nei.y-shpwai.y)/100;
    }
   else{
       // this.ball.x = Math.cos(angle)*(this.circleRadius - this.ballRadius) + this.centerX;
        nei.x=Math.cos(ang.jieguo)*(100-40);
     nei.y=Math.sin(ang.jieguo)*(100-40);
      //  myScroller.viewport.scrollV = Math.sin(angle6)*(100-nei.y)+180+nei.y*10//纵向滚动的位置
          //  myScroller.viewport.scrollH  =Math.cos(angle6)*(100-nei.x)+360+nei.x*10;//横向滚动的位置
    }
    
    
    
    //var radius=100;


    
  
   // console.log(angle6);
   }


        小圆.stage.addEventListener(egret.TouchEvent.TOUCH_END,leavenei, this);
        function leavenei(){
            timer.stop();
        }

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值