【用Cocos Creator给暗恋的女生写一个游戏(9)】——(Run Game) 游戏逻辑与碰撞检测

原创 2016年08月29日 08:00:08

至此为止,我们已经把主要的技术问题都解决了,现在我们给游戏添加
具体的逻辑

给主角添加碰撞组件

这里写图片描述

回顾一下我们已经添加的碰撞组件的节点

管子兄弟:tag=333

管子哥哥和管子弟弟:tag=3331

大老公:tag=666

主角可以跟它们产生碰撞,碰撞的效果如下

管子兄弟:(离开时)加分(相当于已经跳过了一组管子)

管子哥哥或者管子弟弟:主角死亡,游戏失败

大老公:能量槽加1,大老公销毁

完善主角逻辑,重新修改如下

Player.js

var STATE = cc.Enum({
NONE:0,
NORMAL:1,
SUPER:2,
DEAD:3,
});
cc.Class({
    extends: cc.Component,

    properties: {
        oSpeedX:0,
        superSpeedX:0,
        gravity:0,
        jumpSpeed:0,
        groundY:0,
        state:{
            default:STATE.NONE,
            type:STATE,
            visible:false,//属性面板不显示
        }
    },

    init: function (game) {
        this.game = game;
        this.speedY = 0;
        this.speedX = this.oSpeedX;
        this.state = STATE.NORMAL;
        this.registerInput();
        //cc.director.getCollisionManager().enabled = true;
    },

    onCollisionEnter:function(other,self){
        if(this.state == STATE.NORMAL){
            if(other.tag == 666){
                this.game.gainEnergy();
                this.game.prefabManager.desStar(other.node);
            }
            if(other.tag == 3331){
                this.die();
            }
        }
    },

    onCollisionExit:function(other,self){
        if(other.tag == 333){
            this.game.gainScore();
        }
    },

    registerInput: function(){
        let self = this;
        //键盘事件
        cc.eventManager.addListener({
            event: cc.EventListener.KEYBOARD,
            onKeyPressed: function(keyCode, event) {
                if(keyCode == cc.KEY.back){
                    cc.director.loadScene("Menu");
                }else{
                    self.jump();
                }
            }
        }, self.node);
        //触摸事件
        cc.eventManager.addListener({
            event: cc.EventListener.TOUCH_ONE_BY_ONE,
            onTouchBegan: function(touch, event) {
                self.jump();
            }
        }, self.node);
    },

    jump:function(){
        this.speedY = this.jumpSpeed;  
    },

    strengthen:function(){
        this.state = STATE.SUPER;
        this.node.color = cc.Color.RED;
        this.speedX = this.superSpeedX;
        //5秒超级速度,2秒普通速度进行缓冲,一共7秒无敌
        let self = this;
        var cache = function(){
            self.speedX = self.oSpeedX;
        }
        this.scheduleOnce(cache,5);
        this.scheduleOnce(this.recover,7);
    },

    recover:function(){
        this.state = STATE.NORMAL;
        this.node.color = cc.Color.WHITE;
        this.oSpeedX += 10;//给游戏加一点难度
        this.speedX = this.oSpeedX;
        this.game.energyBar.progress = 0;
        this.game.energyBar.node.getChildByName("Bar").color = cc.Color.GREEN;
    },

    die:function(){
        this.state = STATE.DEAD;  
        this.node.color = cc.Color.BLACK;
        this.game.stopGame();
    },

    update: function (dt) {
        if(this.state != STATE.NONE && this.state != STATE.DEAD){
            this.speedY -= this.gravity * dt;
            this.node.y += this.speedY * dt;
            if(this.node.y <= this.groundY){
                this.node.y = this.groundY;
            }
            this.game.cameraManager.moveBg(this.speedX * dt);
        }
    },
});

Game.js

var Player = require("Player");
var CameraManager = require("CameraManager");
var PrefabManager = require("PrefabManager");
cc.Class({
    extends: cc.Component,

    properties: {
        player:Player,
        cameraManager:CameraManager,
        prefabManager:PrefabManager,
        energyBar:cc.ProgressBar,
        scoreLabel:cc.Label,
        gameOverMenu:cc.Node,
        overScore:cc.Label,
    },

    onLoad: function () {
        //返回键返回菜单
        cc.eventManager.addListener({
            event: cc.EventListener.KEYBOARD,
            onKeyPressed: function(keyCode, event) {
                if(keyCode == cc.KEY.back){
                    cc.director.loadScene('Menu');
                }
            }
        }, this.node);
        this.startGame();
    },

    startGame: function(){
        cc.director.getCollisionManager().enabled = true;
        this.energyBar.progress = 0;
        this.score = 0;
        this.scoreLabel.string = "0m"
        this.cameraManager.init(this);
        this.prefabManager.init(this);
        this.player.init(this);
    },

    stopGame: function(){
        cc.director.getCollisionManager().enabled = false;
        this.gameOverMenu.active = true;
        this.overScore.string = this.score+"m";
    },

    gainScore: function(){
        this.score += 10;
        this.scoreLabel.string = this.score+"m";
    },

    gainEnergy:function(){
        this.energyBar.progress += 0.1;
        if(this.energyBar.progress > 0.9){
            this.energyBar.node.getChildByName("Bar").color = cc.Color.RED;
            this.player.strengthen();
        }
    },

    restartGame: function(){
        cc.director.loadScene("RunGame");
    },

    returnMenu: function(){
        cc.director.loadScene("Menu");
    },
});

最终效果

这里写图片描述

结束菜单

这里写图片描述

至此,我们的第一个小游戏就结束了

版权声明:本文为博主原创文章,转载请保留原文链接blog.csdn.net/potato47

相关文章推荐

【用Cocos Creator给暗恋的女生写一个游戏(12)】——跨场景访问节点、存储数据、添加音效音乐、打包发布

跨场景访问节点我们来看一下之前做的菜单场景中间有一个记录的label我们一直没理她,今天我们就来翻她的牌子我们每次游戏结束时都会有一个分数,这个分数变量在相应的游戏场景里,我们想要的效果时:当返回菜单...

【用Cocos Creator给暗恋的女生写一个游戏(7)】——(Run Game)背景移动

新建CameraManager.js添加到在Game的子节点CameraManager下CameraManager.jscc.Class({ extends: cc.Component, ...

【用Cocos Creator给暗恋的女生写一个游戏(6)】——(Run Game)主角逻辑

我们在Canvas节点的同级添加一个Game节点,并添加两个子节点如图新建一个脚本取名叫做“Game”并添加到Game节点上Game.jsvar Player = require("Player");...

【用Cocos Creator给暗恋的女生写一个游戏(5)】——(Run Game)场景搭建

先看图这个场景我们只用了两张小图片素材,分别是A1和B1对应的图片,而A2和B2是复制前面的,可以看出,A和B部分明显长出屏幕的宽,这是为了实现背景无限移动的效果(当图片滚动到一定距离,我们让它再重新...

【用Cocos Creator给暗恋的女生写一个游戏(8)】——(Run Game) Prefab的动态管理

我们先来考虑一下这个PrefabManager是干什么的,我们的游戏中有重复出现的水管和老公,所以PrefabManager要能够动态管理他们,理所当然要有创建和销毁的方法,创建很简单,我们只需要每隔...

【用Cocos Creator给暗恋的女生写一个游戏(11)】——(Jump Game) 镜头跟随

上节自习大家是不是上的很开心啊。。。。大家是不是发现了两个游戏有辣么多相同的地方,就连很多节点的名字都一样但是有一个东西是第一游戏没有的,那就是中间的那个Camera我把Camera节点添加上颜色Ca...

【用Cocos Creator给暗恋的女生写一个游戏(13)】——整体回顾,工程文件

Load场景Load.jscc.Class({ extends: cc.Component, properties: { loadBar: cc.ProgressBar,...

【用Cocos Creator给暗恋的女生写一个游戏(14)】——(完结)写在后面

终于写完了!虽然比我预期的晚了一点我的暑假生活就是这样的:吃饭,睡觉,看奥运会,打代码,写教程我也不知道写完有没有人看,反正我写的时候挺嗨的,本来我准备都用第三人称写的,但是不知道怎么的,不知不觉就改...

【用Cocos Creator给暗恋的女生写一个游戏(4)】——游戏主菜单

既然是两个游戏,所以X想用两个主页面,最理想的就是用pageview,可是Creator还没支持,所以用一个差不多的模拟一下——ScrollView新建一个ScrollView空节点,添加Scroll...

【用Cocos Creator给暗恋的女生写一个游戏(3)】——游戏加载界面

恰好今天Creator1.2发布,我们紧跟潮流,就用1.2开始做吧 X给游戏起了一个名字47-21,其中深意自己体会。(其实就是思琪名字的谐音,并且今年是她21岁的生日。。。当然你也可以理解为思琪爱你...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【用Cocos Creator给暗恋的女生写一个游戏(9)】——(Run Game) 游戏逻辑与碰撞检测
举报原因:
原因补充:

(最多只允许输入30个字)