Cocos Creator游戏之橡皮怪(二)

1.创建计分板

(1)添加计分板bgCocos Creator游戏之橡皮怪(二)_第1张图片

 (2)创建倒计时时间和分数Label

Cocos Creator游戏之橡皮怪(二)_第2张图片

(3)创建进度条

Cocos Creator游戏之橡皮怪(二)_第3张图片

 2.创建粒子特效(相当于装饰)

(1)创建粒子

Cocos Creator游戏之橡皮怪(二)_第4张图片

 (2)修改粒子组件:

Cocos Creator游戏之橡皮怪(二)_第5张图片

 Cocos Creator游戏之橡皮怪(二)_第6张图片

修改前:

Cocos Creator游戏之橡皮怪(二)_第7张图片

修改后:

Cocos Creator游戏之橡皮怪(二)_第8张图片

3.创建橡皮怪并添加碰撞盒

Cocos Creator游戏之橡皮怪(二)_第9张图片

ps:这里我用的是图片没有用到预制件,初始位置也是自己定的。也可以使用代码进行预制件生成

4.创建地刺的预制件并添加BoxCollider

 

Cocos Creator游戏之橡皮怪(二)_第10张图片

5.让player能够跳跃和隔岸跳

 onLoad () {
        this.ismoving=false;//触摸事件禁用标志
        //开始触摸
        this.node.on("touchstart",this.setInputControl.bind(this));
    },

  //释放触摸
    onDestroy(){
        this.node.off("touchstart",this.setInputControl.bind(this));
    },

  setInputControl(touch,event){
        if(this.ismoving) return;
        this.ismoving = true;
        //convertToNodeSpaceAR 将触摸的位置转化为该节点下的坐标
        //touch.getLocation() 获取当前触点位置。
        let location = this.node.convertToNodeSpaceAR(touch.getLocation());
        //得到主角的位置
        let point = this.player.getPosition();
        this.jump(point.x*location.x>=0); //决定原地跳还是跨岸跳    
    },

    jump(JumpInPlace){
        let place = this.player.getPosition();
        let callback = cc.callFunc(function(){
            this.ismoving = false;
        }.bind(this));
        //原地跳
        let isRigth = (this.player.x>0)?-1:1;//这里对主角的左右方向跳判断
        let action0 = cc.moveBy(0.1,cc.v2(100*isRigth,0));
        let action1 = action0.reverse();//执行与原动作相反的动作
        let seq0 = cc.sequence(action0,action1,callback);
        
        //隔岸跳
        let action2 = cc.moveTo(0.2,cc.v2(-place.x,place.y));
        let action3 = cc.rotateBy(0,0,180,0);
        let seq1 = cc.sequence(action2,action3,callback);
        //判断跳
        this.player.runAction(JumpInPlace?seq0 : seq1);
    },

这里代码涉及到api还是有几个的:

(1)convertToNodeSpaceAR :

         官方API:https://docs.cocos.com/creator/api/zh/classes/Node.html#converttonodespacear

         简书:https://www.jianshu.com/p/350a488f4802

(2)touch.getLocation() :https://docs.cocos.com/creator/api/zh/classes/Touch.html#getlocation

(3)cc.callFunc : https://docs.cocos.com/creator/api/zh/modules/cc.html#callfunc

(4)cc.moveBy :

         来源于csdn : https://blog.csdn.net/agsgh/article/details/79447090

(5)触摸事件:

官方API:https://docs.cocos.com/creator/manual/zh/scripting/internal-events.html

ps:请注意适配!!!刚在运行时发现bg拉伸和logo及字体严重变形!!!

给logo添加widget和对Canvas修改

Cocos Creator游戏之橡皮怪(二)_第11张图片

Cocos Creator游戏之橡皮怪(二)_第12张图片

 将脚本挂在bg节点处,并拖动player

Cocos Creator游戏之橡皮怪(二)_第13张图片

        ​​​​​​效果图:尴尬的是由于图片的原因会出现下方的拉伸

 6.生成地刺

   properties: {
        //地刺预制件
        diCiPre : cc.Prefab
    },

 onLoad () {
  
        //开启碰撞检测
        cc.director.getCollisionManager().enabled =true;
         //创建对象池
        this.count =0;
        this.myPool =new cc.NodePool();
        for(let i=0;i<8;i++)
        {
            this.createDici();
        }
    }

    //生成地刺
    createDici()
    {
        let dici;
        this.count++;
        if(this.myPool.size()>0) //通过 size 接口判断对象池中是否有空闲的对象
        {
            dici =this.myPool.get();
        }else // 如果没有空闲对象,也就是对象池中备用对象不够时,我们就用 cc.instantiate 重新创建
        {
            dici =cc.instantiate(this.diCiPre);
        }
        let random =(Math.random()>0.5)? -1:1;
        let pos =this.calPosition(random);
        this.node.addChild(dici);
        dici.zIndex =-1;
        dici.setPosition(pos);
        dici.scaleX =random; //s生成左右边地刺方向
    },  

7.地刺移动

创建diCiObj脚本并挂在地刺预制件上

Cocos Creator游戏之橡皮怪(二)_第14张图片

Cocos Creator游戏之橡皮怪(二)_第15张图片

 

编写地刺移动

    onLoad (){
        this.isMoving=false;
        this.node.parent.on("touchstart",this.diciMove.bind(this));
    },
    diciMove()
    {
        if(!this.isMoving && this.node.parent &&this.node.parent.getComponent("game").ismoving){
            this.isMoving =true;
            let callback =cc.callFunc(function(){
                if(this.node.y>this.node.parent.height/2){
                    //调用game脚本中的地刺生成方法
                    this.node.parent.getComponent("game").createDici();
                    //将地刺添加进对象池中
                    this.node.parent.getComponent("game").myPool.put(this.node);
                }
                this.isMoving =false;
            }.bind(this));
            this.node.runAction(cc.sequence(cc.moveBy(0.2,cc.v2(0,140)),callback));
        }
    },

8.添加分数和倒计时

 在触摸事件中添加分数

    properties: {
    //声明计分板
    scoreLab:cc.Label,
    //声明倒计时时间
    timeLab:cc.Label,
    //声明进度条
    timeprogress:cc.ProgressBar,
    },

onLoad () {
    this.score = 0;
    cc.director.getCollisionManager().enabled =true;
    this.time =10;//运行时间
    this.alltime=this.time;//总时间
    this.timeset();//显示时间
},

  timeset()//计时板
    {
        var mytime=setInterval(() => {
            this.time--;
            this.timeprogress.progress=this.time/this.alltime;
            this.timeLab.string ="time:"+this.time;  
            if(this.time ===0)
            {
                clearInterval(mytime);//清除计时器
            }
        }, 1000);
    },
  // update (dt) {},
    setInputControl(touch,event){
        if(this.ismoving) return;
        this.ismoving = true;
        //convertToNodeSpaceAR 将触摸的位置转化为该节点下的坐标
        //touch.getLocation() 获取当前触点位置。
        let location = this.node.convertToNodeSpaceAR(touch.getLocation());
        //得到主角的位置
        let point = this.player.getPosition();
        this.jump(point.x*location.x>=0); //决定原地跳还是跨岸跳   
        this.score++;
        this.scoreLab.string = "score:"+this.score; 
    },

Cocos Creator游戏之橡皮怪(二)_第16张图片

 运行之后效果:

Cocos Creator游戏之橡皮怪(二)_第17张图片

9.添加结束UI并绑定

Cocos Creator游戏之橡皮怪(二)_第18张图片

 properties: {
         //提示界面
        hintUI : cc.Node,
    },

onLoad () {
        this.hintUI.active = false; //初始化隐藏
}

  //提示中的确定按钮
    onConfirmClickBut(){
        cc.director.loadScene("game");
    },

    //提示中退出按钮
    onQuitClickBut(){
        cc.director.end();
    }

在倒计时为0显示

 timeset()//计时板
    {
        var mytime=setInterval(() => {
            this.time--;
            this.timeprogress.progress=this.time/this.alltime;
            this.timeLab.string ="time:"+this.time;  
            if(this.time ===0)
            {
                this.hintUI.active = true;
                clearInterval(mytime);//清除计时器
            }
        }, 1000);
    },

Cocos Creator游戏之橡皮怪(二)_第19张图片

Cocos Creator游戏之橡皮怪(二)_第20张图片

 Cocos Creator游戏之橡皮怪(二)_第21张图片

 至此游戏结束

之后会带来微信打飞机游戏、中级捕鱼达人

你可能感兴趣的:(Cocos,Creator游戏)