对于这一教程,你需要安装最新的Cocos2D-X版本(游戏邦注:在写本篇教程的时候更新到2.1.4)。如果你还未拥有最新版本的Cocos2D-X,先下载它并在终端运行如下命令去安装模版:

cd ~/Downloads/cocos2d-x-2.1.4 ./install-templates-xcode.sh -f -u 然后使用iOS\cocos2d-x\cocos2dx模版在Xcode创造一个新项目。点击Next,将项目命名为TileGame,将项目设置为Universal,点击Next然后点击Create。

你将在这一项目中使用ARC,所以如果这是你第一次听到ARC,我会鼓励你先了解下它。模版并不是默认使用ARC,但幸运的是,我们能够轻松地进行 修改。前往Edit\Refactor\Convert to Objective-C ARC。往下拉并只选择文件main.m, AppDelegate.cpp, HelloWorldScene.cpp,然后点击Check并完成向导的步骤。

select targets(from raywenderlich)

创建并运行,然后确保一切都还正常运行—-你应该能够看到标准的“你好世界”屏幕。

接下来下载游戏资源的压缩文件。压缩文件包含如下内容:

你将面向玩家对象使用的精灵。

一些伴随着cfxr效用所创造的音效(你将会在教程中用到)。

一些伴随着Garage Band所创造的背景音乐。

你将用到的一些砖块设置—-这将伴随着你将使用的地图编辑器,但我认为我们能够更轻松地将其与其它内容包含在一起。

一些额外的“特别”砖块,将在之后进行详细解释。

当你下载了资源后,打开它并将TileGameResources文件夹拖到项目的Resources群组中。在项目菜单里,右击 Resources群组,并选择Add Files to “TileGame”…选择Resources/TileGameResources文件夹,核实选中了Copy items into destination group’s folder (if needed)以及Create groups for any added folders,然后点击完成。

如果一切顺利的画,所有的文件都将出现在你的项目中。

tile game(from raywenderlich)

现在我们将开始创造地图!

创造地图

Cocos2D-X支持基于开放源Tiled Map Editor去创造地图并将其以TMX格式进行保存。

下载Tiled Map Editor。在编写本篇教程的时候,其最新版本是0.9.0。

然后运行Tiled,前往File\New,并如下填写对话内容:

new map(from raywenderlich)

在定向区域中,你可以在Orthogonal或Isometric间做出选择。在此你将选择Orthogonal。

接下来你将设置地图的大小。记住这是在砖块中,而不是像素中。你将创造一个较小的地图,所以在此你应该选择50×50。Tiled将基于像素呈现给 你总体地图的大小,即在New Map对话的最底部。这是在长度和宽度的基础上将地图大小(50个砖块)乘以砖块的大小(32像素)所计算出来的。

最后,你将明确宽度和高度。你在此所选择的是取决于美术人员所设置的砖块。对于本篇教程,你将使用一些伴随着Tiled编辑器的样本砖块,即32×32规格,选择它便点击OK。

接下来你必须添加砖块设置去绘制你的地图。在菜单栏上点击Map,然后关掉New Tileset…,并如下填写对话框内容:

new tileset(from raywenderlich)

为了获得图像,点击Browse并导航至你自己的TileGame/Resources/TileGameResources文件夹,然后选择你之前从资源压缩中下载的tmw_desert_spacing.png文件,并将其添加到项目中。它将自动根据文件名填写名字。

你可以将宽度和高度设置为32×32,因为这也是砖块的大小。对于边缘和间隔:

边缘是关于在Tiled开始寻找真正的砖块像素前应该为当前的砖块略过多少多少像素(包括宽度和高度)。

间隔是关于Tiled在明确了实际砖块像素并转向下一个砖块数据之后应该前进多少像素(包括宽度和高度)。

如果你着眼于tmw_desert_spacing.png,你将发现每个砖块都围绕着一个1像素的黑色边缘,这也解释了边缘和间隔为1的设置。

tile(from raywenderlich)

当你点击OK时,你将看到砖块呈现在Tilesets窗口中。现在你可以开始绘制了。点击工具栏的Stamp Brush图标,然后点击地图上的任何一个位置去放置一个砖块。

tileset(from raywenderlich)

所以继续绘制地图—-尽可能发挥创造性!确保添加至少一些建筑到地图上,因为你在之后将需要一些碰撞内容。

tileset(from raywenderlich)

为了更轻松地绘制内容,你可以着眼于一些快捷方法。以下是最常用到的一些方法:

你可以在Tileset选择器中围绕着一系列砖块拖曳一个盒子,并同时放下多个相邻的砖块。

你可以通过View\Zoom In和View\Zoom Out进行放大和缩小。

z键将在基于Stamp Brush工具编辑地图时进行旋转。

在一些新功能中你可能会注意到Mini-map。这是一个很棒的功能,它让你能够看到一个迷你地图!着眼于我在Mini-map最下方的迷宫中的糟糕尝试。红色盒子代表你在主要编辑窗口中看到的区域。

tileset(from raywenderlich)

当你在阅读下一个区域中的滚动时牢牢记住这一Mini-map视图。

需要注意的是这一教程的资源是出现在地图前的——所以如果你很懒的话便可以直接利用它。如果你这么做,你应该在Tiled打开地图并明确它是如何设置的。

当你完成地图的绘制时,在Layers视图中双击Tile Layer,将名字改为Background。然后点击File\Save,并将文件保存到TileGame项目中的TileGame \Resources\TileGameResources,将文件命名为TileMap.tmx,并覆盖现有的文件。

你将在之后使用Tiled做其它事,但是现在让我们将这一地图带进游戏中!

添加Tiled地图到Cocos2D-X场景中

打开HelloWorldScene.h,在#include “cocos2d.h”之后添加如下内容:

using namespace cocos2d;

这能指导编辑器去使用cocos2d命名空间,所以你不需要为所有内容加上cocos2d的前缀。

然后添加以下内容到类定义中,即在花括号之后:

private: CCTMXTiledMap *_tileMap; CCTMXLayer *_background;

这创造了一个实例变量去追踪砖块地图本身,并创造了另一个实例变量去追踪地图的背景层。你将在之后学到更多有关砖块地图层面的内容。

接下来,用如下内容换掉HelloWorldScene.cpp:

CCTMXObjectGroup *objectGroup = _tileMap->objectGroupNamed(“Objects”);  if(objectGroup == NULL){ CCLog(“tile map has no objects object layer”); return false; }  CCDictionary *spawnPoint = objectGroup->objectNamed(“SpawnPoint”);  int x = ((CCString)*spawnPoint->valueForKey(“x”)).intValue(); int y = ((CCString)*spawnPoint->valueForKey(“y”)).intValue();  _player = new CCSprite(); _player->initWithFile(“Player.png”); _player->setPosition(ccp(x,y));  this->addChild(_player); this->setViewPointCenter(_player->getPosition());

最后一行有个预兆——但不要担心,你很快就能到达那里。

让我们暂停一会并解释对象层面和对象群组。首先注意你是通过在CCTMXTiledMap对象中(而不是layerNamed)通过objectGroupNamed方法检索对象层面。它返回了一个特殊的CCTMXObjectGroup对象。

然后objectGroup调用了objectNamed方法去获得一个CCDictionary,并包含了一些有关对象的有用信息,如x和y轴,宽度和高度。在教程的这一部分,你需要关心的便是x和y轴,将其设置为玩家精灵的位置。

在代码块的最后你设置了视图去明确玩家的位置。所以现在添加如下内容到HelloWorldScene.h中:

// In the public section void setViewPointCenter(CCPoint position);

并添加一个新方法到HelloWorldScene.cpp(在文件的最下方最好):

void HelloWorld::setViewPointCenter(CCPoint position) {  CCSize winSize = CCDirector::sharedDirector()->getWinSize();  int x = MAX(position.x, winSize.width/2); int y = MAX(position.y, winSize.height/2); x = MIN(x, (_tileMap->getMapSize().width * this->_tileMap->getTileSize().width) – winSize.width / 2); y = MIN(y, (_tileMap->getMapSize().height * _tileMap->getTileSize().height) – winSize.height/2); CCPoint actualPosition = ccp(x, y);  CCPoint centerOfView = ccp(winSize.width/2, winSize.height/2); CCPoint viewPoint = ccpSub(centerOfView, actualPosition); this->setPosition(viewPoint); }

这是关于砖块的解释。想象这一函数设置了摄像机的中心位置。它让用户能够进入地图中x,y轴的任何位置—-但是你有可能不想呈现出某些点,如你可能不想要屏幕超过地图的边缘(那么它便只会呈现出黑边!)。

cocos2d怎么开发android,android cocos2d x 怎么创建地图?相关推荐

  1. cocos-2d 游戏开发

    利用cocos-2d游戏引擎进行简单的游戏开发 levelLayer.java package Layer;import android.graphics.Point; import android. ...

  2. Cocos2d游戏开发学习记录——4.开发《植物大战僵尸》

    文章目录 1.植物大战僵尸 2.开发前导 3.载入页面 4.菜单页面 & 预备战斗页面 5.植物准备页面 6.正式战斗页面 7.战斗逻辑 8.向日葵逻辑 9.进度条逻辑 10.音乐逻辑 11. ...

  3. Cocos2d游戏开发学习记录——2.使用Cocos2D Graphic实现僵尸的移动

    文章目录 1.游戏引擎Cocos2D 2.图形引擎Cocos2D Graphic 3.实践一 4.Cocos2D的坐标体系 5.CCNode 6.实践二 7.CCAction 8.实践三 9.CCAn ...

  4. 【移动开发】Android中强大的适配功能----Fragment(碎片)总结

    作为大多数刚接触Android应用开发的人来说,在一个强大的Activity类中,就可以完成丰富多彩的UI工作,但是杂乱的屏幕分辨率,使得本来好不容易写好的UI,变得不堪入目...该怎么办那? 查阅了 ...

  5. android 实现表格横向混动_Flutter混合开发和Android动态更新实践

    Flutter混合开发和Android动态更新实践 感谢闲鱼和csdn的文章给的思路: 本篇是实践性文章包含两部分 将Flutter工程编译后的文件集成到Android项目 将Flutter代码热更新 ...

  6. 【Android FFMPEG 开发】Android 中使用 FFMPEG 对 MP3 文件进行混音操作

    文章目录 一.前置操作 ( 移植 FFMPEG ) 二.FFMPEG 混音命令 三.Android FFMPEG 混音源代码完整示例 四.博客源码 一.前置操作 ( 移植 FFMPEG ) 参考 [A ...

  7. 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )

    文章目录 I . FFMPEG 交叉编译后的函数库及头文件 II . FFMPEG 静态库打包动态库 ( 仅做参考 ) III . 创建 Android Studio 工程 IV . FFMPEG 头 ...

  8. 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )

    文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...

  9. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )

    文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...

  10. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

最新文章

  1. 手机移动端网站建设这些细节问题需重视
  2. JavaScript学习总结二:js闭包(Closure)概念
  3. OpenCV中的cvCreateImage的参数channels()的意义
  4. Python:利用python编程实现三维图像绘制展示(六面体旋转、三维球柱状体、下雪场景等)
  5. TCODE找相應的BAPI(主要是找到包PACKAGE)
  6. boost::python::def相关的测试程序
  7. 雷蛇灯光配置文件_雷蛇猎魂光蛛竞技版机械键盘评测
  8. HDU Problem - 3338 Kakuro Extension (最大流,建图)
  9. SQL 分页存储过程(转)
  10. 敏捷软件开发宣言ndash;Manifesto for Agile Software Development
  11. android 开发赚钱
  12. 别停特斯拉旁边!特斯拉车辆自燃全车烧毁 连旁边的奥迪都没放过...
  13. 计算机文件不能包含的符号,文件夹的名称不能包括
  14. burpsuite工具抓取Https数据包
  15. 儒略日小工具-输入年月日时分秒转换儒略日
  16. 从零开始配置搭建云服务器(Linux系统、简明详细教程)
  17. 树莓派CM4烧录系统
  18. Tomcat服务器日志输出格式设置
  19. 计算机键盘打字基础知识,计算机基础知识:计算机键盘的使用
  20. android beam小米,小米手机自定义空白卡模拟加密卡门禁卡教程

热门文章

  1. 代码详解:用深度学习在Keras中对蝴蝶进行分类
  2. 第七课 技术小白如何开发一个DAPP区块链应用(以宠物商店为例)
  3. 超萌塔防游戏:《保卫萝卜CarrotFantasy》
  4. java中切分字符串的方法
  5. dict的几种形式及dict添加值的几种方式
  6. 启用树莓派3的Uart
  7. 2008春节值得回忆的琐记
  8. unzip: Ubuntu系统下解压文件失败的解决办法
  9. 员工的激励与自我激励 - 项目管理系列文章
  10. Windows 设置CMD命令行下的代理服务器