首页 » 技术分享 » CocosCreator学习笔记:小游戏练习《小球射怪物》版本1

CocosCreator学习笔记:小游戏练习《小球射怪物》版本1

 

版本1:屏幕上方随机出现怪物,怪物向下移动;由屏幕底部某处随机方向不断发射能量小球(原力);小球碰到怪物,怪物减血,小球消失,怪物血光后消失,计分

版本3:屏幕上方随机出现怪物(身大血长行动迟缓,身小血短行动快捷),怪物向下移动;由屏幕底部某处随机方向不断发射能量小球(火焰,冰冻,雷电,原力),小球碰到怪物,怪物减血,小球消失,怪物血光后消失,计分

 

版本1 效果如下:(引擎版本 cc v1.10.1)

得分:

消灭怪物会增加积分,显示在此处

怪物:

1场景上方随机位置不断出现的怪物

2怪物自带血条

3血可以设置

子弹:

1 子弹在一定偏移角度内,向上移动

2 遇到怪物后销毁

按钮:

子弹发射初始点

点击可发射子弹

场景布置和资源准备

1 分辨率调整 高1920 宽1080:模拟器分辨率(文件->设置->预览运行);设计分辨率(项目->项目设置->项目预览);canvas中设计分辨率。

2 层级管理器和场景编辑器对应设置

 层级编辑器说明:

bulletGroup:空节点,子弹控制层,脚本 shotmon_bulletGroup

monGroup:空节点,怪物控制层 ,脚本 shotmon_monGroup

lbScore:label,分数显示

banner:空节点,底部UI条

bg:图片,底部UI条背景图

TD1:按钮,点击生成子弹,子弹初始化位置

gameController:空节点,游戏控制,脚本 shotmon_gameController

3 制作 怪物 预制体

3.1 挂脚本:shotmon_mon

3.2 挂碰撞盒

3.3 增加血值显示,分成两部分,bl 背景条 (红色 ),tl血条(黄色)

4 制作 子弹 预制体,挂脚本 

 

脚本

shotmon_gameController

//shotmon_gameController
cc.Class({
    extends: cc.Component,
    properties:()=>( {
        bulletGroup:{
            default:null,
            type:require('shotmon_bulletGroup'),
        },
        monGroup:{
            default:null,
            type:require('shotmon_monGroup'),
        },
    }),
    btn_click_firingPoint(){
        this.bulletGroup.spawn();
    },

});

 shotmon_monGroup

//shotmon_monGroup
var shotmon_monG=cc.Class({
    name:'shotmon_monG',
    properties:{
        name:'',            //名字 
        HP:10, 
        freqTime:1,         //出生频率  
        score:0,  
        prefab:cc.Prefab    //预制体
    }
});
cc.Class({
    extends: cc.Component,
    properties: {
        lbScore:cc.Label, 
        monG:{
            default:[],
            type:shotmon_monG
        },
    },
    onLoad () {
        for(let ii=0;ii<this.monG.length;++ii){
            var freqTime = this.monG[ii].freqTime;
            var fname = 'callback' + ii;
            this[fname] = function(e){this.initMon(this.monG[e]);}.bind(this,ii);
            this.schedule(this[fname],freqTime);
        }
    },
    initMon(monInfo){
        var newNode = cc.instantiate(monInfo.prefab);
        newNode.getComponent('shotmon_mon').HP = monInfo.HP;
        newNode.getComponent('shotmon_mon').score = monInfo.score;
        this.node.addChild(newNode);
        newNode.setPosition(cc.v2(cc.randomMinus1To1()*200,cc.random0To1()*200+200));
    },

 shotmon_mon.js

cc.Class({
    extends: cc.Component,
    properties: {
        HP:1,
        HPLine:cc.Node,
        score:{
            default:0,
            type:cc.Integer
        },
    },
     onLoad () {
         cc.director.getCollisionManager().enabled = true;
         this.HPLineW = this.HPLine.width;
         this._HP = this.HP;
        
         
     },
    onCollisionEnter(other,self){
        var hp = this.HP;
        //this.node.active = false;
        if(this.HP<=0){
             var num = this.node.parent.getComponent('shotmon_monGroup').lbScore.string;
            this.node.parent.getComponent('shotmon_monGroup').lbScore.string =  parseInt(num) + parseInt(this.score);
            this.node.destroy();
        }else{
            hp = hp -1 ;
            
        }
        this.HP = hp ;
        this.HPLine.width = this.HPLineW *(hp/this._HP);
    },
  
});

shotmon_bulletGroup

var shotmon_bulletG=cc.Class({
    name:'shotmon_bulletG',
    properties:{
        name:'',            //子弹名字
        freqTime:1,         //发射频率
        angle:{             //发射角度范围-1~1 => 0~180
            default:0,
            type:cc.Float,
            tooltip:'子弹发射角度:0~1 代表中线偏移值 '
        },           
        prefab:cc.Prefab    //子弹预制体
    }
});
cc.Class({
    extends: cc.Component,
    properties:()=>( {
        //子弹类型
        bulletG:{
            default:[],
            type:shotmon_bulletG
        },
        //火力点
        firingPoint:{
            default:[],
            type:cc.Node
        },
    }),
    onLoad () {
        
        // 取到火力点的坐标值 
        var banner = this.firingPoint[0].parent         //获得火力点的父级banner
        this.pose = banner.convertToWorldSpaceAR(cc.v2(this.firingPoint[0].x,this.firingPoint[0].y));//以banner锚点为原点坐标系,获得火力点的坐标值
        this.poseAR = this.node.convertToNodeSpace(cc.v2(this.pose.x,this.pose.y));//在子弹管理层上,以锚点为原点,取得火力点坐标值的对应值
        this.schedule(this.spawn,this.bulletG[0].freqTime);
    },
    //发射子弹
    spawn(){
        var nodeO = cc.instantiate(this.bulletG[0].prefab);
        nodeO.getComponent('shotmon_bullet').angle = this.bulletG[0].angle*cc.randomMinus1To1();
        this.node.addChild(nodeO);
        nodeO.setPosition(cc.v2(this.poseAR.x,this.poseAR.y));
    },
   
});

shotmon_bullet

cc.Class({
    extends: cc.Component,
    properties: {
        speedy:100,
        speedx:100,
    },
    onLoad () {
        cc.director.getCollisionManager().enabled = true;
    },
    onCollisionEnter(other,self){
        this.node.destroy();
    },
    update (dt) {
        this.node.y += dt*this.speedy;
        this.node.x += dt*this.speedx*this.angle;
    },
});

转载自原文链接, 如需删除请联系管理员。

原文链接:CocosCreator学习笔记:小游戏练习《小球射怪物》版本1,转载请注明来源!

0