`

【cocos2d-html5】 如何使用cocos2d-html5 制作基于tile地图的游戏教程:第一部分

 
阅读更多

好久没有写博客了,自从自己用了云笔记后,喜欢在云笔记里记录,但最近发现自己cocos2d-html5的文章还是比较少,所以把最近通过别人的笔记cocos2d的关于tiled地图使用的文章转成了ch5终于跑起来了。

参考原文:
http://www.raywenderlich.com/1163/how-to-make-a-tile-based-game-with-cocos2d

中文参考稿:
http://www.cnblogs.com/andyque/archive/2011/04/11/2012852.html

关于如何创建 tiled地图文件tmx 文件的内容,请参考以上的中文参考稿,已经写的比较清楚了。唯一不清楚的就是tmx文件里面要修改你的图片相对路径:
如:
 <tileset firstgid="1" name="tmw_desert_spacing" tilewidth="32" tileheight="32" spacing="1" margin="1">
  <image source="tmw_desert_spacing.png" trans="ff00ff" width="265" height="199"/>
 </tileset>

 

本文采用的cocos2d-html5版本为v2.1.5

现把我的翻译脚本copy上来供大家参考:

 



var MyLayer = cc.Layer.extend({
    isMouseDown: false,
    helloImg: null,
    helloLabel: null,
    circle: null,
    sprite: null,
    size: null,
    _tileMap: null,
    player: null,
    init: function () {
        this._super();
        // ask director the window size
        this.size = cc.Director.getInstance().getWinSize();
        // 加载tmx
        var tileMap = cc.TMXTiledMap.create(tmx_001);
        this._tileMap = tileMap;
        this.addChild(this._tileMap, 1, 0);
        // 获得对象层
        var objectLayer = tileMap.getObjectGroup("Objects");
        var array = objectLayer.getObjects();
        var spawnPoint = array[0];
        var objX = spawnPoint["x"];
        var objY = spawnPoint["y"];
        var width = spawnPoint["width"];
        var height = spawnPoint["height"];

        this.player = cc.Sprite.create(s_Player);
        this.player.setPosition(cc.p(objX, objY));
        this.addChild(this.player, 1, 0);
        this.setViewpointCenter(this.player.getPosition());

        // 添加事件监听
        this.setTouchEnabled(true);
    },
    registerWithTouchDispatcher: function () {
        // CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
        cc.Director.getInstance().getTouchDispatcher().addTargetedDelegate(this, 0, true);
    },
    onTouchEnded: function (touch, event) {
        var touchLocation = touch.getLocation();
        touchLocation = this.convertToNodeSpace(touchLocation);

        //获得精灵当前位置
        var playerPos = this.player.getPosition();
        console.log("touchLocation.x: " + touchLocation.x);
        console.log("touchLocation.y: " + touchLocation.y);
        console.log("playerPos.x :" + playerPos.x);
        console.log("playerPos.y :" + playerPos.y);

        /*
         计算出touch点和精灵的位置之差。我们必须基于touch位置选择一个方向,因此,
         首先,我们需要计算出是上下移动还是左右移动。然后,我们比较正负值,决定具体的方向。
         */
        var diff = cc.pSub(touchLocation, playerPos);
        if (Math.abs(diff.x) > Math.abs(diff.y)) {
            if (diff.x > 0) {
                playerPos.x += this._tileMap.getTileSize().width;
            } else {
                playerPos.x -= this._tileMap.getTileSize().width;
            }
        } else {
            if (diff.y > 0) {
                playerPos.y += this._tileMap.getTileSize().height;
            } else {
                playerPos.y -= this._tileMap.getTileSize().height;

            }

        }

        if (playerPos.x <= (this._tileMap.getMapSize().width * this._tileMap.getTileSize().width) &&
            playerPos.y <= (this._tileMap.getMapSize().height * this._tileMap.getTileSize().height) &&
            playerPos.y >= 0 && playerPos.x >= 0) {

            // 设置精灵位置
            this.setPlayerPosition(playerPos);
        }
        this.setViewpointCenter(this.player.getPosition());
    },
    onTouchBegan: function (touches, event) {
        // 返回true表明接受这个触摸
        return true;
    },
    /**
     * 设置玩家所在的视窗
     * @param position
     * @returns {*}
     */
    setViewpointCenter: function (position) {
        // 屏幕大小
        var winSize = this.size;
        var x = Math.max(position.x, winSize.width / 2);
        var y = Math.max(position.y, winSize.height / 2);
        x = Math.min(x, (this._tileMap.getMapSize().width * this._tileMap.getTileSize().width) - winSize.width / 2);
        y = Math.min(y, (this._tileMap.getMapSize().height * this._tileMap.getTileSize().height) - winSize.height / 2);
        //console.log("x2 is : " + x + "    y2 is : " + y);
        // 实际位置
        var actualPosition = cc.p(x, y);

        // 坐标中心
        var centerOfView = cc.p(winSize.width / 2, winSize.height / 2);

        //console.log("centerOfView x" + centerOfView.x + "y " + centerOfView.y);
        // 计算两点间的差分。
        var viewPoint = cc.pSub(centerOfView, actualPosition);
        console.log("视窗 x :" + viewPoint.x + " 视窗 y :" + viewPoint.y);
        // 设置当前层的视窗
        this.setPosition(viewPoint);
    },
    setPlayerPosition: function (viewPoint) {
        console.log("精灵位置 x " + viewPoint.x);
        console.log("精灵位置 y " + viewPoint.y);
        this.player.setPosition(viewPoint);
    }
});


var MyScene = cc.Scene.extend({
    onEnter: function () {
        this._super();
        var layer = new MyLayer();
        this.addChild(layer);
        layer.init();
    }
});

 

如果有了这个文章,你还不能跑起来,那我只能发源码给你了,把邮箱发过来。

 

附件为源码和源码目录结构。

  • 大小: 47.9 KB
分享到:
评论
1 楼 bulbul 2014-03-18  

thanks you

相关推荐

    cocos2d-iphone-2.0.tar.gz

    Cocos2d-iPhone是一个广泛使用的2D游戏开发框架,专为iOS设备(如iPhone和iPad)设计。这个开源项目让开发者能够轻松地创建高质量的游戏、应用和交互式内容,而无需深入理解底层图形和物理编程。"cocos2d-iphone-2.0...

    cocos2d-x源码素材

    【cocos2d-x源码素材】是一套用于学习cocos2d-x游戏开发的代码资源,它在Windows平台上使用Visual Studio 2010进行编译并通过了测试。这个资源包涵盖了多个重要的游戏开发技术,包括碰撞检测、瓦片地图(Tile Map)...

    2048-cocos2d-js

    《2048游戏源代码解析——基于Cocos2d-js》 2048是一款深受玩家喜爱的数字拼图游戏,由Gabriele Cirulli于2014年开发,其简单易懂的游戏机制和挑战性吸引了全球无数玩家。在本篇文章中,我们将深入探讨如何使用...

    cocos2d-x游戏实例-纵版射击游戏

    【cocos2d-x游戏实例-纵版射击游戏】是一个基于Cocos2d-x框架开发的垂直滚动射击游戏,这种类型的游戏通常被称为“飞行射击”或“弹幕射击”。Cocos2d-x是一个广泛使用的开源游戏开发框架,它支持多平台开发,包括...

    Cocos2d-x 地图行走的实现2

    总结来说,"Cocos2d-x 地图行走的实现2"这个主题涵盖了从地图加载、角色定位、碰撞检测、动画制作到用户输入响应等一系列游戏开发的核心技术。通过理解并实践这些知识点,开发者能够创建出具有生动地图和角色互动的...

    cocos2d-x游戏开发详细教程

    cocos2d [1] 是一个基于MIT协议的开源框架,用于构建游戏、应用程序和其他图形界面交互应用。可以让你在创建自己的多平台游戏时节省很多的时间。 Cocos2D也拥有几个主要版本,包括Cocos2D-iPhone、Cocos2D-X,以及被...

    Cocos2d-x 3.x游戏开发之旅_PDF电子书下载 带书签目录 高清完整版

    《Cocos2d-x 3.x游戏开发之旅》是一本专为游戏开发者设计的详细教程,旨在引导读者深入了解和掌握Cocos2d-x 3.x框架进行游戏开发的技术与实践。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动平台,如iOS、...

    cocos2d-x游戏开发系列教程-坦克大战游戏加载地图的编写上

    5. **地图对象(TileMap)**:对于像坦克大战这样使用瓷砖(Tile)构成的地图,cocos2d-x提供了`cc::TMXMap`类。它可以加载TMX(Tiled Map XML)格式的文件,这是一种广泛用于2D游戏的地图格式。TMXMap允许开发者...

    iOS游戏应用源代码——cocos2d-cocos2d-iphone-extensions.zip

    1. **场景管理**:cocos2d-iphone使用场景(Scene)和层(Layer)的概念来组织游戏逻辑,使得游戏结构清晰,易于管理。 2. **渲染系统**:它支持精灵(Sprite)、纹理(Texture)、动作(Action)等2D图形元素,...

    cocos2d-x游戏开发详细教程, 附带超详细cocos2d学习路径图

    cocos2d是一个基于MIT协议的开源框架,用于构建游戏、应用程序和其他图形界面交互应用。可以让你在创建自己的多平台游戏时节省很多的时间。 Cocos2D也拥有几个主要版本,包括Cocos2D-iPhone、Cocos2D-X,以及被社区...

    Cocos2d-x Tilemap Classes

    在这个主题中,我们专注于"Cocos2d-x Tilemap Classes",这是一组工具,让开发者能够轻松地在游戏环境中构建和管理瓷砖地图(Tile Maps)。瓷砖地图是一种高效且灵活的方法,用于创建复杂的2D场景,如游戏关卡,它们...

    Cocos2D-iPhone游戏开发教程打包整理-(泰然论坛整理)

    (译)如何使用cocos2d制作基于tilemap的游戏教程 第一部分.pdf (译)如何在cocos2d里面使用动画和spritesheet.pdf (译)如何用cocos2d制作iphone游戏:旋转炮塔.pdf (译)如何用cocos2d制作iphone游戏:更猛的怪物和...

    基于cocos2d-x的连连看游戏

    本篇文章将围绕“基于cocos2d-x的连连看游戏”进行深度探讨,帮助开发者理解和实践如何利用这一框架构建一个有趣的连连看游戏。 连连看,又称对对碰,是一种深受玩家喜爱的休闲益智游戏。其基本规则是寻找并消除两...

    cocos2d-x-2.1.5.chm文档

    2. 渲染系统:基于OpenGL ES,cocos2d-x提供高效且灵活的图形渲染,支持精灵批处理、图块地图(TileMap)、粒子效果(ParticleSystem)等。 3. 动画系统:通过Action对象,可以轻松创建复杂的动画效果,如移动、...

    Cocos2d-x3.0游戏实例《别救我》源码

    Cocos2d-x3.0是一款广泛应用于游戏开发的开源框架,主要支持2D游戏的构建,基于C++,同时也提供了Lua和JavaScript的绑定。它以其高效、跨平台的特性,使得开发者能够轻松地在iOS、Android、Windows等多个平台上发布...

    Cocos2D-X游戏开发技术精解

    第1章 Cocos2D-X引擎的介绍 1 1.1 何为游戏引擎 1 1.1.1 游戏的核心—引擎 1 1.1.2 引擎的特点 2 1.1.3 知名的引擎介绍 4 1.1.4 引擎的分类 5 1.2 Cocos2D-X引擎的来历 8 1.3 引擎的版本 9 1.4 下载与安装 10 1.5 ...

    cocos2d-iphone之魔塔20层第五部分

    《cocos2d-iphone之魔塔20层第五部分》是关于使用cocos2d-iphone框架开发经典游戏——魔塔的一个教程章节。在这个部分,我们将深入探讨如何利用cocos2d-iphone的特性来实现魔塔游戏的第20层的逻辑和交互。 首先,...

    cocos2d-x 塔防游戏源码

    Cocos2d-x是Cocos2d家族的一员,它提供了一套完整的2D游戏开发工具,包括场景管理、动画制作、物理引擎、粒子系统、音频处理等功能。Cocos2d-x v3.9是其稳定且广泛使用的版本,优化了性能,增加了许多新特性,如热...

Global site tag (gtag.js) - Google Analytics