cocos creator 如何限制速度最大值,禁止超出屏幕宽度

1.限制速度最大值

> 使用场景:当点击左右键盘的时候,在水平方向会有一个加速度,那么,就会有速度最大值来限制速度过大。

解决方案:使用函数绝对值可以解决

   if(Math.abs(this.speed)>this.maxMoveSpeed){
            this.speed=this.maxMoveSpeed*this.speed/Math.abs(this.speed);
        }

1.禁止超出屏幕

> 使用场景:当点击左右键盘的时候,物体会左右走动,如何禁止物体超出屏幕范围 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210205171232649.gif) 解决方法:使用函数绝对值可以解决
      if(Math.abs(this.node.x)>this.winMaxWidth){
           this.node.x=this.winMaxWidth*this.node.x/Math.abs(this.node.x);
       }

小结:类似如上述的问题,限制某一些值,可以考虑使用函数绝对值

附加:星星代码

// Learn TypeScript:
//  - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
// Learn Attribute:
//  - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html

const {ccclass, property} = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {

    @property
    jumpHeight:number=0;

    @property
    jumpDuration:number=0;
   
    @property
    maxMoveSpeed:number=0;

    @property
    accer:number=0;

    speed:number=0;
   
    accLeft:Boolean=false;
    accRight:Boolean=false;
    winMaxWidth:number=0;

    // LIFE-CYCLE CALLBACKS:

    onLoad () {
        cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onkeyDown, this);
        cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, this.onkeyUp, this);
    }
    
    onkeyDown(e:cc.Event.EventKeyboard){
        switch (e.keyCode) {
            case cc.macro.KEY.a:
                 this.accLeft=true;  
                     
                break;
            case cc.macro.KEY.d:
                this.accRight=true;                   
            default:
                break;
        }
     }
     onkeyUp(e:cc.Event.EventKeyboard){
           if(this.accLeft=true){
               this.accLeft=false;
           }
           if(this.accRight=true){
               this.accRight=false;
           }

     }

    start () {
        cc.tween(this.node).then(this.runJumpAction()).start();
        this.winMaxWidth=cc.winSize.width/2-this.node.width/2;
    }
    // 设置向上向下动作
    runJumpAction(){
        let topJump=cc.tween().by(this.jumpDuration,{y:this.jumpHeight});
        let downJump=cc.tween().by(this.jumpDuration,{y:-this.jumpHeight})
        let action=cc.tween().sequence(topJump,downJump);
        return cc.tween().repeatForever(action);

    }



    update (dt) {
       if(this.accLeft){
           this.speed-=this.accer*dt;
   
       }
       if(this.accRight){
           this.speed+=this.accer*dt;

       }
        // 限制最大速度
        if(Math.abs(this.speed)>this.maxMoveSpeed){
            this.speed=this.maxMoveSpeed*this.speed/Math.abs(this.speed);
        }
       if(Math.abs(this.node.x)>this.winMaxWidth){
           this.node.x=this.winMaxWidth*this.node.x/Math.abs(this.node.x);
       }
       
       this.node.x+=this.speed*dt;
    

    }

    onDestroy(){
        cc.systemEvent.off(cc.SystemEvent.EventType.KEY_DOWN, this.onkeyDown, this);
        cc.systemEvent.off(cc.SystemEvent.EventType.KEY_UP, this.onkeyUp, this);
    }


}

你可能感兴趣的:(cocos,creator疑难杂症,cocos,cocos,creator)