关闭

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

标签: 游戏cocoscreator新手教程实战
1779人阅读 评论(0) 收藏 举报
分类:

我们在Canvas节点的同级添加一个Game节点,并添加两个子节点如图

这里写图片描述

新建一个脚本取名叫做“Game”并添加到Game节点上

Game.js

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

    properties: {
        player:Player,
    },

    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(){
        this.player.init(this);
    },

    stopGame: function(){

    },

});

作为一个专业的游戏开发者(一脸严肃,咳咳),我们有必要探讨一下游戏的设计模式

我们知道一个游戏中会有很多元素,对应到我们设计的很多节点,按理说每个节点都有自己的逻辑,有时多个节点彼此也有联系,我们把每个节点想象成一个人,如果每个人都乱交(胡乱交际的意思,请那位早熟的同学出去),那这个游戏的世界就乱套,所以我们需要一位领导者来领导这些人,每一位普通人都各司其职,当他需要其他人的帮助时,要向领导者请示,这样一来,所有普通人都只与领导者联系,领导者控制者所有普通人,世界一片美好。。。我们把这个模式叫做领导者模式(这个名字是我自己起的。。。。)

这个Game就相当于领导者,我们在其中写游戏的主体逻辑和管理各个节点的重要方法,像开始游戏,结束游戏和各个节点的初始化之类

require方法可以得到脚本组件,我们在属性里添加一个player让它的类型是require(“Player”),然后在将Player节点拖入对应位置,player属性就会引用Player节点的Player脚本,这样就可以在Game.js里调用Player.js的方法了(Player.js应先建立,不然require不到文件会报错)

这里写图片描述

新建一个脚本取名叫做“Player”并添加到Player节点上

Player.js

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

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

    // // use this for initialization
    init: function (game) {
        this.game = game;
        this.speedY = 0;
        this.state = STATE.NORMAL;
        this.registerInput();
    },

    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;
    },

    recover:function(){
        this.state = STATE.NORMAL;
    },

    die:function(){
        this.state = STATE.DEAD;  
    },

    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;
            }
        }
    },
});

这里写图片描述

我们从上往下看

大多数情况下我们都会给主角划分状态,我这里给主角设定了四个状态

NONE:游戏开始前,什么状态都没有

NORMAL:正常状态

SUPER:超级赛亚人形态。。。

DEAD:死

主角的一些基本属性

speedX:主角的横向速度,因为相对屏幕水平是不移动的,这个x轴速度是用来移动背景的,暂时不用管,

gravity:重力,

jumpSpeed:起跳速度,

groundY:地面位置,我们让它等于主角落在地面是主角的Y轴坐标,主角是不能掉到地面下方的,我们会在更新主角位置时判断

state:主角的状态,一开始我们把它设为无状态(OMG啊。。。)

当领导发话“开始游戏了!”,player就执行init方法,初始化一些乱七八糟的东西,让主角状态变成normal,注册事件

中间的几个改变主角状态的方法,会在特定的时候调用

最下面的update会根据主角的属性更新主角的位置

看一下效果

这里写图片描述

0
0
查看评论

【用Cocos Creator给暗恋的女生写一个游戏(1)】——Cocos Creator初遇见

X去网上百度了一下怎样快速开发一款手机游戏,却发现前几条都是广告,后来还是了解到了游戏引擎,知道了Cocos和Unity,据说市面上大多数手游都是Cocos做的,所以他决定尝试一下,他去官网下载了Cocos2d—X,去网上找教程,找资料,折腾了一上午终于在电脑上显示了HelloWorld,可是他想做...
  • potato47
  • potato47
  • 2016-08-28 22:42
  • 2149

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

新建CameraManager.js添加到在Game的子节点CameraManager下CameraManager.jscc.Class({ extends: cc.Component, properties: { far:cc.Node, farRel...
  • potato47
  • potato47
  • 2016-08-29 07:47
  • 1665

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

至此为止,我们已经把主要的技术问题都解决了,现在我们给游戏添加 具体的逻辑给主角添加碰撞组件回顾一下我们已经添加的碰撞组件的节点管子兄弟:tag=333管子哥哥和管子弟弟:tag=3331大老公:tag=666主角可以跟它们产生碰撞,碰撞的效果如下管子兄弟:(离开时)加分(相当于已经跳过了一组管子...
  • potato47
  • potato47
  • 2016-08-29 08:00
  • 2128

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

先看图这个场景我们只用了两张小图片素材,分别是A1和B1对应的图片,而A2和B2是复制前面的,可以看出,A和B部分明显长出屏幕的宽,这是为了实现背景无限移动的效果(当图片滚动到一定距离,我们让它再重新滚动。这样就可以简单的实现无限背景)。复习时间到:我们的原始图片素材并没有这么高,所以要让它纵向拉伸...
  • potato47
  • potato47
  • 2016-08-28 23:27
  • 1644

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

上节自习大家是不是上的很开心啊。。。。大家是不是发现了两个游戏有辣么多相同的地方,就连很多节点的名字都一样但是有一个东西是第一游戏没有的,那就是中间的那个Camera我把Camera节点添加上颜色Camera就是标记一块区域,这块区域是干什么的呢?又是最后面那位宝强同学说出了正确答案这块区域就是镜头...
  • potato47
  • potato47
  • 2016-09-02 10:14
  • 1898

【用Cocos Creator给暗恋的女生写一个游戏(2)】——要做一个什么样的游戏?

俗话说得好,万事开头难,往后越来越难。。。 X觉得完全从头做一个游戏有点困难,所以他决定参考一下别人的,他翻了一下官方论坛,里面有一些教程,但没有什么具体的游戏,他从示例工程里看到了一个根据Flappy Bird改编的游戏,说是改编,其实就是把鸟换成了羊,他决定就在这个游戏的基础上做一个自己的游戏。...
  • potato47
  • potato47
  • 2016-08-28 22:44
  • 2139

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

我先来说说,第二个游戏是个什么样子的我们继续用第一个游戏的主角,这里的场景是天空,天空中有很多云,有的云很老实,有的云很脆弱,有的云很好动,我们的主角目的只有一个——上天经过我的无数次实验(其实也没有很多次啦。。),设定了主角的移动方式为自动跳跃,玩家控制左右方向,水平速度一直存在,这样可以给游戏增...
  • potato47
  • potato47
  • 2016-09-02 09:55
  • 1038

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

恰好今天Creator1.2发布,我们紧跟潮流,就用1.2开始做吧 X给游戏起了一个名字47-21,其中深意自己体会。(其实就是思琪名字的谐音,并且今年是她21岁的生日。。。当然你也可以理解为思琪爱你…)因为X基本没有什么美术功底,所以一切简约为主。。。先看一下要相处一个月的东西X要做一个竖屏的游戏...
  • potato47
  • potato47
  • 2016-08-28 23:04
  • 2948

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

既然是两个游戏,所以X想用两个主页面,最理想的就是用pageview,可是Creator还没支持,所以用一个差不多的模拟一下——ScrollView新建一个ScrollView空节点,添加ScrollView组件,使其大小充满全屏,在content节点下添加两个单色的Sprite节点,分别取名为Pa...
  • potato47
  • potato47
  • 2016-08-28 23:11
  • 2043

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

我们先来考虑一下这个PrefabManager是干什么的,我们的游戏中有重复出现的水管和老公,所以PrefabManager要能够动态管理他们,理所当然要有创建和销毁的方法,创建很简单,我们只需要每隔一段距离往pipeLayer添加子节点就行了,但销毁它们还是需要一些技巧的,从逻辑角度来说,当水管和...
  • potato47
  • potato47
  • 2016-08-29 07:56
  • 2858
    个人资料
    • 访问:203265次
    • 积分:2739
    • 等级:
    • 排名:第15521名
    • 原创:69篇
    • 转载:8篇
    • 译文:0篇
    • 评论:176条
    最新评论