关闭

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

标签: 游戏Creatorcocos教程实战
1669人阅读 评论(0) 收藏 举报
分类:

新建CameraManager.js添加到在Game的子节点CameraManager下

CameraManager.js

cc.Class({
    extends: cc.Component,

    properties: {
        far:cc.Node,
        farRelSpeed:0,//相对主角移动速度
        farOffX:0,//循环滚动距离
        ground:cc.Node,
        groundRelSpeed:0,
        groundOffX:0,
        pipeLayer:cc.Node,
        layerRelSpeed:0,
    },

    init: function (game) {
        this.game = game;
        this.oFarX = this.far.x;
        this.oGroundX = this.ground.x;
    },

    moveBg: function(distance){
        this.far.x -= distance * this.farRelSpeed;
        if(this.far.x < (this.oFarX - this.farOffX)){
            this.far.x = this.oFarX;
        }
        this.ground.x -= distance * this.groundRelSpeed;
        if(this.ground.x < (this.oGroundX-this.groundOffX)){
            this.ground.x = this.oGroundX;
        }
        this.pipeLayer.x -= distance * this.layerRelSpeed;
    },
});

这里写图片描述

修改Game.js

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

    properties: {
        player:Player,
        cameraManager:CameraManager,
    },

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

    stopGame: function(){

    },

});

修改Player.js

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

下面我要用我超强的逻辑思维给大家解释一下这个背景是怎么移动的

咳咳

我们知道每一次调用update方法,player的位置就会根据相应属性更新,而背景的移动应该跟player的移动相关,(这里我们可能要讲一下爱因斯坦的相对论,但可能讲完就下课了,所以不讲了…)我们需要知道player往前移动,背景就要往后移动,它们的速度是相反的。

还有远景和近景的移动速度不同,远处的移动速度要慢一些(那位举“坐火车”的例子的同学很聪明)

所以我们在CameraManager里设置了far相对player的速度 farRelSpeed 和ground相对于player的速度 groundRelSpeed 以及 layerRelSpeed ,因为ground,pipeLayer和player是在同一平面的,所以他们的相对速度都设为1,far节点较远,设为0.2

还有两个属性farOffX和groundOffX,他们是记录两个节点循环滚动距离的,因为我们的背景只有两张图片,需要循环显示,那个farOffX = 1000是计算出来的,留给同学们当作业,做完明天班长收一下

最后我们要把上次没用到的Player的speedX填上数值

这里写图片描述

通过这么巧妙的设置,我们就可以随便更改主角的速度而不用管背景的移动速度了,因为背景会随着主角速度动态调整

看一下效果

这里写图片描述

0
0
查看评论

Cocos2D-x游戏开发之十:背景无限滚动

今天研究了一下Coco2D-x的背景无限滚动,其实是学习别人的demo,不过自己最终还是折腾出来了,其实还是比较简单了,就是背景不停地移动然后两张图片交替的贴上去。 其精髓之处就是不断地更新背景然后在每一帧里调整两张背景的\X锚点,然后就会给人一种主角再向前奔跑的感觉。核心代码如下: bool ...
  • vanquishedzxl
  • vanquishedzxl
  • 2014-03-25 21:41
  • 6898

Cocos creator 游戏背景循环滚动--Javascript编写

Cocos creator 制作游戏背景循环滚动--Javascript编写      我们知道,在利用触控的Cocos creator编辑器开发2d横屏游戏的时候,经常需要利用背景的移动来模拟主角前进后退等效果。作为小白,在自己完成毕业设计和做一些案例的时候,接触到...
  • baidu_38630622
  • baidu_38630622
  • 2018-01-16 14:07
  • 181

移动游戏背景

作者:陈文源     在android系统上开发游戏的时候,需要处理主角在移动过程中背景的移动,借助于Bitmap的createBitmap方法可以挖取源位图的其中一块,这样可以在程序中通过定时器控制不断地挖取源位图不同位置的块,从而给用户看到背景移动的假象。 以...
  • pku_android
  • pku_android
  • 2012-05-17 00:23
  • 2744

cocos creator从零开始做酷跑小游戏 | 背景轮播

在cocoscreator中新建一个hello world,然后把所需要的资源放入Texture文件夹,将背景以及地板拖入层级管理器 按照箭头指示的方式拖入即可在场景编辑器中预览并且编辑,我们需要将背景稍微拉的比视图大一点,因为我们需要滚动。现在介绍一下轮播的思想,大家都知道运动是相对的,我们...
  • tingyugetc11
  • tingyugetc11
  • 2017-07-13 09:40
  • 673

cocos2d-x 3.2|创建游戏中的场景:背景

1.创建class类 BackGround.h BackGround.cpp 2.在BackGround.h中构建方法:
  • Test_dx
  • Test_dx
  • 2014-08-27 11:59
  • 901

Cocos2D-x游戏开发之十一:在游戏背景上添加精灵

有了游戏背景的无限滚动之后我们应该在背景上添加些什么东西了,毕竟这个将来是一个游戏需要让用户动起来,而不是让大家傻傻的看着一个无限循环背景,这样会遭到同行的批斗的。      今天我们接着上一张在背景上添加些精灵。      首先我们先...
  • vanquishedzxl
  • vanquishedzxl
  • 2014-03-27 20:32
  • 1423

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

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

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

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

Cocos2d-x游戏开发笔记(一)游戏背景音乐的添加

游戏在运行期间,背景音乐必不可少,一个好的音效能把游戏的互动效果提高一个层次。     在Cocos2d-x中,CocosDenshion实现了3个音效引擎,由底层到高级分别是:         1. CDSoundEngine &#...
  • u013015629
  • u013015629
  • 2015-05-29 23:51
  • 337

cocos2dx实现背景的无限滚动

滚动的游戏背景在射击类游戏中比较常见(如:雷霆战机),下面用cocos2dx实现背景的无限滚动(基于引擎cocos2dx2.1.4) void MainScene::update(float delta){ //创建滚动的主游戏背景 CCSize spsize = m_bgsprite1-&...
  • u014771617
  • u014771617
  • 2015-04-17 22:42
  • 675
    个人资料
    • 访问:203511次
    • 积分:2742
    • 等级:
    • 排名:第15509名
    • 原创:69篇
    • 转载:8篇
    • 译文:0篇
    • 评论:176条
    最新评论