Cocos2d-js官方完整项目教程翻译:七、加载TiledMap并且显示

一、简介

在本教程中,告诉你如何添加tiledmap跑酷游戏作为新的背景

我们还将学习如何使背景滚动无限和主角无限

在这些神奇的是所有关于移动Cocos2D

二、做一些准备性的工作

我们开始动手之前让我们添加资源文件和我们的游戏对应的名称

三、资源管理课全局设置

因为我们将需要参考其他层的层内各。所以要检索的的最佳方法是通过标签

将下面的代码添加到globals.js

if(typeof TagOfLayer == "undefined") {
    var TagOfLayer = {};
    TagOfLayer.background = 0;
    TagOfLayer.Animation = 1;
    TagOfLayer.Status = 2;
};

这里我们给背景层与动画状态标签名称因此我们可以通过标签获取其他

我们也需要resource.js添加资源变量

//Our two tiled map are named s_map00 and s_map01.
var res = {
    helloBG_png : "res/helloBG.png",
    start_n_png : "res/start_n.png",
    start_s_png : "res/start_s.png",
    PlayBG_png  : "res/PlayBG.png",
    runner_png  : "res/running.png",
    runner_plist : "res/running.plist",
    map_png: "map.png",
    map00_tmx: "map00.tmx",
    map01_tmx: "map01.tmx"
};

var g_resources = [
    //image
    res.helloBG_png,
    res.start_n_png,
    res.start_s_png,
    res.PlayBG_png,
    res.runner_png,
    res.runner_plist,
    res.map_png,
    res.map00_tmx,
    res.map01_tmx
];
上面的代码加有注释,所以让我们开始下一步。

四、开启ChipMunk的Debug Drawing

如果我们做的ChipMunk物理引擎,你最好使调试绘图。因此,调试过程会更得心应手

将下面的代码添加到animationlayer.js构造函数的函数

this._debugNode = cc.PhysicsDebugNode.create(this.space);
// Parallax ratio and offset
this.addChild(this._debugNode, 10);
当你再次运行你的游戏时,你将看到你个红色的盒子在你的主角身上



五、TilesMap介绍

tiledmap是一个非常通用的概念在2D游戏。建设大型平面地图和一些视差滚动背景是很有用的

tiledmap消耗更少的内存比正常的PNG文件。如果你想建立一些巨大的地图绝对是您正确的选择

事不宜迟让我们进入tiledmap

六、设计制作TiledMap背景地图

首先,你应该下载tiledmap。你可以从这里http://www.mapeditor.org/download.html下载它。tiledmap是一个跨平台的软件有许多不同的版本。你可以根据你的操作系统选择一个版本。下载后平铺的编辑器你应该

熟悉它的使用。你可能想要在它的文档的外观

当你感到舒服的瓷砖你可以用我们提供的素材平铺地图设计

使两个细节处理平铺地图出了本教程的范围

*注:如果你不能使平铺地图的话,你可以跳过的过程和使用平铺地图由我们提供。*)

Cocos2d-js官方完整项目教程翻译:七、加载TiledMap并且显示_第1张图片

七、用tiledMap地图替换原来的地图

现在它的时间与我们的新代替旧的静态背景图像平铺地图

我们将在backgroundlayer.js做这个。首先,我们应该backgroundlayer类添加成员变量

map00:null,
map01:null,
mapWidth:0,
mapIndex:0,

我们应该删除我们需要创建静态背景下的旧代码

*注这里我取消注释的代码片段您可以安全地删除它们。

//        var winSize = cc.Director.getInstance().getWinSize();
//
//        var centerPos = cc.p(winSize.width / 2, winSize.height / 2);
//        var spriteBG = cc.Sprite.create(s_PlayBG);
//        spriteBG.setPosition(centerPos);
//        this.addChild(spriteBG);
最后 我们将添加 新的 代码片段 创建 平铺 地图 背景

this.map00 = cc.TMXTiledMap.create(res.map00_tmx);
this.addChild(this.map00);
this.mapWidth = this.map00.getContentSize().width;
this.map01 = cc.TMXTiledMap.create(res.map01_tmx);
this.map01.setPosition(cc.p(this.mapWidth, 0));
this.addChild(this.map01);
保存所有的更改然后运行项目:

Cocos2d-js官方完整项目教程翻译:七、加载TiledMap并且显示_第2张图片

在这里,我们添加两个地图。该map01旁边就是map00背景。在后面的章节中我们将解释为什么我们要添加两个地图

八、介绍场景显示

由于物理身体无限精灵同步它的位置与物理的身体

几秒钟后玩家将屏幕之外的只是因为它是在上个教程

所以我们需要移动游戏层的X位置每帧使它在可见光范围内。这里是animationlayer.js的代码片段

getEyeX:function () {
    return this.sprite.getPositionX() - g_runnerStartX;
},

这里的geteyex函数计算动画三角洲运动

我们应该把相同的三角洲运动this.gamelayer包含背景和动画在相反方向的这样我们就可以调用Update方法的每一帧playscene.js更新方法末尾添加以下代码

update:function (dt) {
        // chipmunk step
        this.space.step(dt);

        // Simulation cpSpaceAddPostStepCallback
        for(var i = 0; i < this.shapesToRemove.length; i++) {
            var shape = this.shapesToRemove[i];
            this.gameLayer.getChildByTag(TagOfLayer.background).removeObjectByShape(shape);
        }
        this.shapesToRemove = [];

        var animationLayer = this.gameLayer.getChildByTag(TagOfLayer.Animation);
        var eyeX = animationLayer.getEyeX();

        this.gameLayer.setPosition(cc.p(-eyeX,0));
    }
九、移动背景图层

建立背景层的运动过程几乎是我们在上一节相同。但我们需要做一些计算两个瓦片地图

让我们这样做。添加一个新的成员函数backgroundlayer checkandreload

checkAndReload:function (eyeX) {
        var newMapIndex = parseInt(eyeX / this.mapWidth);
        if (this.mapIndex == newMapIndex) {
            return false;
        }
        if (0 == newMapIndex % 2) {
            // change mapSecond
            this.map01.setPositionX(this.mapWidth * (newMapIndex + 1));
        } else {
            // change mapFirst
            this.map00.setPositionX(this.mapWidth * (newMapIndex + 1));
        }
        this.mapIndex = newMapIndex;
        return true;
    },

eyex已超过屏幕的宽度表达parseInteyex /本。mapwidth大于0的值

我们将使用newmapindex决定地图需要多少像素需要移动

然后我们应该在每帧中该功能

update:function (dt) {
        var animationLayer = this.getParent().getChildByTag(TagOfLayer.Animation);
        var eyeX = animationLayer.getEyeX();
        this.checkAndReload(eyeX);
    }
最后 我们 应该在 背景 的init 方法 结束通话 scheduleupdate

this.scheduleUpdate();
十、把它包起来

最后。我们应该做一些最后的收尾工作

修改playsceneonenter方法添加标签的层并添加背景层,动画游戏

 onEnter:function () {
        this._super();
        this.initPhysics();
        this.gameLayer = cc.Layer.create();

        //add Background layer and Animation layer to gameLayer
        this.gameLayer.addChild(new BackgroundLayer(), 0, TagOfLayer.background);
        this.gameLayer.addChild(new AnimationLayer(this.space), 0, TagOfLayer.Animation);
        this.addChild(this.gameLayer);
        this.addChild(new StatusLayer(), 0, TagOfLayer.Status);

        this.scheduleUpdate();
    },

恭喜!您已成功完成本教程。去看它

注意:如果你不想显示调试一个花栗鼠刚体图纸信息。你可以添加下面的代码创建

physicsdebugnode

this._debugNode.setVisible(false);
十一、总结

在本教程中,我们已经遇到了tiledmap和显示。这两个概念是非常重要的当你发展物理无尽的游戏运行

你可以从这里http://cocos2d-x.org/docs/tutorial/framework/html5/parkour-game-with-javascript-v3.0/chapter7/res/Parkour.zip下载整个项目

十二、接下来我们写什么

在下一个教程中,我们将添加到我们的游戏币和障碍。在这个教程中,我们学习如何重构我们的游戏代码使其更可扩展

我们也会做一些清理工作playscene和封装岩石的命名硬币

保持调谐与下一个教程编码快乐





你可能感兴趣的:(JavaScript,html5,canvas,cocos2dx,cocos2d-x)