如何用cocos2d x tilemap-x来做一个基于TileMap地图块的游戏

怎么制作一个基于Tile的游戏(2) Cocos2d-x 2.0.4
怎么制作一个基于Tile的游戏(2) Cocos2d-x 2.0.4
发布时间: 23:02:08
编辑:www.fx114.net
本篇文章主要介绍了"怎么制作一个基于Tile的游戏(2) Cocos2d-x 2.0.4",主要涉及到怎么制作一个基于Tile的游戏(2) Cocos2d-x 2.0.4方面的内容,对于怎么制作一个基于Tile的游戏(2) Cocos2d-x 2.0.4感兴趣的同学可以参考一下。
怎么制作一个基于Tile的游戏(2) Cocos2d-x 2.0.4如何制作一个基于Tile的游戏(2) Cocos2d-x 2.0.4&&&&& 在第一篇《如何制作一个基于Tile的游戏》基础上,增加碰撞和拾取功能,原文《Collisions
and Collectables: How To Make a Tile-Based Game with Cocos2D Part 2》,在这里继续以Cocos2d-x进行实现。有关源码、资源等在文章下面给出了地址。
步骤如下:
1.使用上一篇的工程;
2.打开Tiled Map Editor工具,菜单栏→&图层&→&添加图层&,命名为&Meta&。这个层,我们将放入一些假的tile来代表&特殊tile&。菜单栏→&地图&→&新图块&,点击&浏览&,选择&Resources&目录下的meta_tiles.png文件,边距和间距设置成1像素点,点击&确定&。可以看到在&图块&窗口新增了一页,里面有红色和绿色两种tile,如下图所示:
3.确认&Meta&层被选中,选择工具栏上&图章刷&,选择红色tile,绘制可碰撞区域,完成之后,大概如下图所示:
需要给这个tile设置属性来标识它,这样才能知道该tile具有碰撞属性。在&图块&窗口,右键红色tile,选择&图块属性&,新建一个属性,名称为&Collidable&,其值为&true&,如下图所示:
点击&确定&。保存地图。
4.打开HelloWorldScene.h文件,添加如下声明:
CC_SYNTHESIZE_RETAIN(cocos2d::CCTMXLayer*,&_meta,&Meta);
在HelloWorldScene.cpp文件构造函数里,添加代码:
_meta&=&NULL;
在init函数里,添加背景之后,添加如下代码:
this-&setMeta(_tileMap-&layerNamed(&Meta&));
_meta-&setVisible(false);
这里把Meta层隐藏起来了,因为这只是作为阻挡的,不是真实可见的。添加一个新的方法,代码如下:
CCPoint&HelloWorld::tileCoordForPosition(CCPoint&position)
&&&&int&x&=&position.x&/&_tileMap-&getTileSize().
&&&&int&y&=&((_tileMap-&getMapSize().height&*&_tileMap-&getTileSize().height)&-&position.y)&/&_tileMap-&getTileSize().
&&&&return&ccp(x,&y);
这个方法将坐标转换成tile坐标,tile坐标系如下图所示:
修改setPlayerPosition函数,代码如下:
void&HelloWorld::setPlayerPosition(CCPoint&position)
&&&&CCPoint&tileCoord&=&this-&tileCoordForPosition(position);
&&&&int&tileGid&=&_meta-&tileGIDAt(tileCoord);
&&&&if&(tileGid)
&&&&&&&&CCDictionary&*properties&=&_tileMap-&propertiesForGID(tileGid);
&&&&&&&&if&(properties)
&&&&&&&&&&&&const&CCString&*collision&=&properties-&valueForKey(&Collidable&);
&&&&&&&&&&&&if&(collision&&&&collision-&compare(&true&)&==&0)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&}&&&&&&&&&&&
&&&&&&&&}&&&&&&&
&&&&_player-&setPosition(position);
在这里,我们将坐标转成tile坐标,获得这个tile坐标上的GID,再根据GID得到的属性字典,查找是否&Collidable&属性为&true&,如果是则直接返回。
5.编译运行,可以看到忍者不能穿过红色区域了。如下图所示:
6.动态修改Tiled地图。我们为忍者增加可以吃的东西,比如这里的西瓜。创建一个可拾取的前景层,当忍者从tile拾取东西时,就把这个tile从前景层中移除。菜单栏→&图层&→&添加图层&,命名为&Foreground&。注意,若是之前有在&Background&层绘制过西瓜的,需要用底图块,比如这里的沙漠块填充覆盖,以免达不到吃西瓜的效果。然后,选中&Foreground&层,选择西瓜tile块,在地图上进行绘制。如下图所示:
为西瓜标识可拾取。选择&Meta&层,图块切换到&meta_tiles&页,选择绿色tile,绘制到地图上西瓜tile区域。需要先把&Meta&层前置,点击菜单栏→&图层&→&前置图层&,确保&Meta&层在最上层。如下图所示:
在&图块&窗口,右键绿色tile块,选择&图块属性&,新建一个属性,名称为&Collectable&,其值为&true&。点击&确定&。保存地图。
7.打开HelloWorldScene.h文件,添加如下声明:
CC_SYNTHESIZE_RETAIN(cocos2d::CCTMXLayer*,&_foreground,&Foreground);
在HelloWorldScene.cpp文件构造函数里,添加代码:
_foreground&=&NULL;
在init函数里,添加背景之后,添加如下代码:
this-&setForeground(_tileMap-&layerNamed(&Foreground&));
在setPlayerPosition函数检测&Collidable&属性之后,添加检测&Collectable&属性,代码如下:
const&CCString&*collectable&=&properties-&valueForKey(&Collectable&);
if&(collectable&&&&collectable-&compare(&true&)&==&0)
&&&&_meta-&removeTileAt(tileCoord);
&&&&_foreground-&removeTileAt(tileCoord);
8.编译运行,可以看到忍者把西瓜吃掉了,如下图所示:
9.创建计分器。为忍者记录所吃西瓜的数量。我们创建一个新层HelloWorldHud来显示分数。在HelloWorldScene.h文件中,添加如下代码:
class&HelloWorldHud&:&public&cocos2d::CCLayer
&&&&virtual&bool&init();
&&&&CREATE_FUNC(HelloWorldHud);
&&&&void&numCollectedChanged(int&numCollected);
&&&&cocos2d::CCLabelTTF&*
在HelloWorldScene.cpp文件中,进行实现,代码如下:
bool&HelloWorldHud::init()
&&&&bool&bRet&=&
&&&&&&&&CC_BREAK_IF(!&CCLayer::init());
&&&&&&&&CCSize&winSize&=&CCDirector::sharedDirector()-&getWinSize();
&&&&&&&&lable&=&CCLabelTTF::create(&0&,&&Verdana-Bold&,&18.0,&CCSizeMake(50,&20),&kCCTextAlignmentRight);
&&&&&&&&lable-&setColor(ccc3(0,&0,&0));
&&&&&&&&int&margin&=&10;
&&&&&&&&lable-&setPosition(ccp(winSize.width&-&(lable-&getContentSize().width&/&2)&-&margin,
&&&&&&&&&&&&lable-&getContentSize().height&/&2&+&margin));
&&&&&&&&this-&addChild(lable);
&&&&&&&&bRet&=&
&&&&}&while&(0);
&&&&return&bR
void&HelloWorldHud::numCollectedChanged(int&numCollected)
&&&&lable-&setString(CCString::createWithFormat(&%d&,&numCollected)-&getCString());
接下去在HelloWorld类,添加HelloWorldHud层指针,在HelloWorldScene.h文件中HelloWorld类里,添加如下代码:
CC_SYNTHESIZE(int,&_numCollected,&NumCollected);
CC_SYNTHESIZE_RETAIN(HelloWorldHud*,&_hud,&Hud);
在HelloWorldScene.cpp文件HelloWorld类构造函数里,添加代码:
_numCollected&=&0;
_hud&=&NULL;
在scene()函数里,添加如下代码:
HelloWorldHud&*hud&=&HelloWorldHud::create();
scene-&addChild(hud);
layer-&setHud(hud);
在setPlayerPosition函数,检测到&Collectable&属性为&true&时,添加如下代码:
_numCollected++;
_hud-&numCollectedChanged(_numCollected);
10.编译运行,现在可以看到右下角有一个西瓜计分器,如下图所示:
11.增加音效和音乐。在HelloWorldScene.cpp文件HelloWorld类init函数里,添加如下代码:
CocosDenshion::SimpleAudioEngine::sharedEngine()-&preloadEffect(&pickup.wav&);
CocosDenshion::SimpleAudioEngine::sharedEngine()-&preloadEffect(&hit.wav&);
CocosDenshion::SimpleAudioEngine::sharedEngine()-&preloadEffect(&move.wav&);
CocosDenshion::SimpleAudioEngine::sharedEngine()-&playBackgroundMusic(&TileMap.wav&);
在setPlayerPosition函数,检测到&Collidable&属性为&true&,添加如下代码:
CocosDenshion::SimpleAudioEngine::sharedEngine()-&playEffect(&hit.wav&);
检测到&Collectable&属性为&true&,添加如下代码:
CocosDenshion::SimpleAudioEngine::sharedEngine()-&playEffect(&pickup.wav&);
在设置玩家坐标前,添加如下代码:
CocosDenshion::SimpleAudioEngine::sharedEngine()-&playEffect(&move.wav&);
12.编译运行,现在忍者的行动将有配乐,效果图:
参考资料:
1.Collisions and Collectables: How To Make a Tile-Based Game with Cocos2D Part 2
/1186/collisions-and-collectables-how-to-make-a-tile-based-game-with-cocos2d-part-2
2.碰撞与拾取:如何使用Cocos2D制作一款基于tile的游戏第2部分
/zh-hans/19250/%E7%A2%B0%E6%92%9E%E4%B8%8E%E6%8B%BE%E5%8F%96%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8cocos2d%E5%88%B6%E4%BD%9C%E4%B8%80%E6%AC%BE%E5%9F%BA%E4%BA%8Etile%E7%9A%84%E6%B8%B8%E6%88%8F%E7%AC%AC2
3.(译)碰撞检测和收集物品:如何使用cocos2d制作基于tiled地图的游戏:第二部分
/zilongshanren/archive//2033620.html
非常感谢以上资料,本例子源代码附加资源下载地址:http://download.csdn.net/detail/akof
如文章存在错误之处,欢迎指出,以便改正。
本文标题:
本页链接:您所在的位置: &
基于Cocos2D-X的砖块地图教程
基于Cocos2D-X的砖块地图教程
Jorge Jordán
通过文章你将学习如何添加砖块地图到游戏中,跟着玩家滚动地图,并使用对象图层。也会学到如何使用地图编辑器去创造砖块地图本身。同时还有如何在地图上创造碰撞领域,如何使用砖块属性,如何创造可收集的道具并动态地修改地图,以及如何确保你的忍者不会吃太多东西。
这是Cocos2D-X砖块地图教程系列,你将在此创造一款有关沙漠中的忍者寻找美味的西瓜的简单游戏。
需要注意的是该教程是关于Cocos2D-X,即Cocos2D-iPhone的跨平台C++移植。所以你在此编写的代码将适用于iPhone,Android和更多平台上!
在本系列文章的第一部分中,你将学习如何添加砖块地图到游戏中,跟着玩家滚动地图,并使用对象图层。你将学到如何使用地图编辑器去创造砖块地图本身。
而第二部分是关于如何在地图上创造碰撞领域,如何使用砖块属性,如何创造可收集的道具并动态地修改地图,以及如何确保你的忍者不会吃太多东西。
注:本篇教程类似于Cocos2D-iPhone教程。
让我们开始创造砖块地图吧!
对于这一教程,你需要安装最新的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&*_tileM&CCTMXLayer&*_&
这创造了一个实例变量去追踪砖块地图本身,并创造了另一个实例变量去追踪地图的背景层。你将在之后学到更多有关砖块地图层面的内容。
接下来,用如下内容换掉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中:
&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轴的任何位置&-但是你有可能不想呈现出某些点,如你可能不想要屏幕超过地图的边缘(那么它便只会呈现出黑边!)。
diagram(from raywenderlich)
如果摄像机的中心小于winSize.width/2或winSize.height/2,那么部分视角是否会脱离屏幕?同样的,检查最上方的界限也很重要,这也是setViewPointCenter所做的。
到目前为止这一函数被当成设置了摄像机所面对的中心位置。然而,这并不是它真正做的。这是在Cocos2D-X中操控CCNode的摄像机的一种方法,但使用它会比你将使用的解决方法(移动整个层面)更复杂。
着眼于这一图解:
diagram(from
raywenderlich)想象一个大世界,你将着眼于坐标轴,即从0到winSize.height/width。你的视图的中心是 centerOfView,你便能清楚自己想要以哪里为中心(actualPosition)。所以为了用实际位置去匹配视图中心位置,你需要做的便是向 下倾斜地图!
通过从视图中心减去实际位置你便能够做到这点,然后将HelloWorld层面设为该位置。
说了这么多理论,是时候执行它们了!创建并运行项目,如果一切运行正常,你将在屏幕上看到忍者,并且视图会不断移动去呈现他的行动。
simulator(from raywenderlich)
让忍者移动
这是个好的开始,但是你的忍者还只是站在那里!这并不像真正的忍者。你将朝着用户敲打的方向移动忍者而让他动起来。添加如下代码到HelloWorldScene.h的公共部分:
void&registerWithTouchDispatcher();&void&setPlayerPosition(CCPoint&position);&bool&ccTouchBegan(CCTouch&*touch,&CCEvent&*event);&void&ccTouchEnded(CCTouch&*touch,&CCEvent&*event);&
然后打开HelloWorldScene.cpp并将如下代码添加到init:
this-&setTouchEnabled(true);&
这将层面设置为可碰触的,所以它将关注于碰触事件。接下来添加如下方法到文件最底端:
#pragma&mark&&&handle&touches&&void&HelloWorld::registerWithTouchDispatcher()&{&CCDirector::sharedDirector()-&getTouchDispatcher()-&addTargetedDelegate(this,&0,&true);&}&&bool&HelloWorld::ccTouchBegan(CCTouch&*touch,&CCEvent&*event)&{&return&true;&}&&void&HelloWorld::setPlayerPosition(CCPoint&position)&{&_player-&setPosition(position);&}&&void&HelloWorld::ccTouchEnded(CCTouch&*touch,&CCEvent&*event)&{&CCPoint&touchLocation&=&touch-&getLocationInView();&touchLocation&=&CCDirector::sharedDirector()-&convertToGL(touchLocation);&touchLocation&=&this-&convertToNodeSpace(touchLocation);&&CCPoint&playerPos&=&_player-&getPosition();&CCPoint&diff&=&ccpSub(touchLocation,&playerPos);&&if&(&abs(diff.x)&&&abs(diff.y)&)&{&if&(diff.x&&&0)&{&playerPos.x&+=&_tileMap-&getTileSize().&}&else&{&playerPos.x&-=&_tileMap-&getTileSize().&}&}&else&{&if&(diff.y&&&0)&{&playerPos.y&+=&_tileMap-&getTileSize().&}&else&{&playerPos.y&-=&_tileMap-&getTileSize().&}&}&&&if&(playerPos.x&&=&(_tileMap-&getMapSize().width&*&_tileMap-&getTileSize().width)&&&&playerPos.y&&=&(_tileMap-&getMapSize().height&*&_tileMap-&getTileSize().height)&&&&playerPos.y&&=&0&&&&playerPos.x&&=&0&)&{&this-&setPlayerPosition(playerPos);&}&&this-&setViewPointCenter(_player-&getPosition());&}&
在此你覆盖了registerWithTouchDispatcher方法去处理目标碰触事件。这将导致ccTouchBegan/ccTouchEnded方法(单数情况)被调用,而不是ccTouchesBegan/ccTouchesEnded方法(复数情况)。
你可能会好奇单数情况和复数情况有什么区别。不过在这种情况下我们没有必要去弄清楚这些问题。但是我还是想向所有人介绍这一方法,因为它带有2个主要优势:
&你不需要处理NSSets,调度程序能够区分它们。每次调用你将获得一个UITouch。&
&你可以通过在ccTouchBegan返回YES而要求一个UITouch。要求碰触的更新只会被发送到要求它们的委托中。所以如果你删除/结束/取消更新,你就需要确保它是你的碰触。这将让你无需在执行多点碰触时做各种检查。&
不管怎样,在你的ccTouchEnded位置上,你像往常那样将位置转换成视图坐标轴,然后再转换成GL坐标轴。而新任务便是你调用了this-&convertToNodeSpace(touchLocation)。
这是因为碰触位置将提供给你用户在视口中轻敲的坐标轴(例如100,100)。但是你可能已经滚动了地图,所以它将匹配(800,800)的位置。所以调用这一方法将基于你如何移动层面而抵消碰触。
接下来你将明确碰触点和玩家位置的区别。你将基于碰触选择一个方向,所以首先你应该决定是上下移动还是左右移动。然后你将判断是正数还是复数而进行上下移动。
你将相对地调整玩家位置,然后将视图中心设置为玩家的位置,这是你在上部分便写下的内容!
注意你必须添加一个安全检查以确保不会将玩家带离地图外部!
所以创建并运行项目,然后尝试它!现在你应该能够轻敲屏幕去移动忍者了!
simulator(from raywenderlich)
这时候你已经知道如何创造地图并将其整合到游戏中了。而在第二部分教程中你将进一步学习如何添加碰撞检测到地图中以避免忍者能够轻松地穿越墙壁。【编辑推荐】【责任编辑: TEL:(010)】
关于&&的更多文章
Cocos2d是一个开源框架,用于构建2D游戏、演示程序和其他图形界
随着云计算、物联网、大数据、移动互联网的大发展,你应该知道这些。
当下,移动App的开发相当火热,Android的和iOS的开发
关于App营销,了解哪类App最能引起用户关注,以及不同
在iOS开发过程中,尤其是对于新手来说,都会遇到或多
数据库技术是计算机科学中一个重要的组成部分,它正在以日新月异的速度发展。数据库的基本原理和应用技术已经成为高等院校的学生
Windows Phone专家
Android开发专家
51CTO旗下网站用户:**ngxue**
用户:**ngxue**
用户:**1024**
用户:**yang999**
用户:**yang999**
用户:**还锌蘖**
用户:**还锌蘖**
用户:**lureone**
用户:**lureone**
用户:****
用户:****
用户:****
用户:**6767363@qq.**
用户:**ialun**
用户:**ialun**
用户:****
用户:**igo**
用户:**chen08**
用户:**iqi**
用户:****
公告:因课程即将全面升级,2017年度所有课程进行统一调价!&&&&&&&&&&&&&&公告:因课程即将全面升级,2017年度所有课程进行统一调价&&&&&&&&&&&&&&&
分享:9999+
课程顾问贴心解答
为你推荐精品课程,无论就业还是升职加薪,毫无压力。
名企定制紧随大流
量身打造紧贴企业需求的实用性课程。
系统教学把控效果
集学、测、练为一体的学习系统为你科学的安排学习进度,提高效率。
一线大师1对1指导
课程研发团队内一线资深讲师一对一指导,手把手教学,直到学会。
点播答疑完美结合
每周2-3次直播解答,保证学员日常学习问题能得到解决。
量身定制学习计划
告别杂乱的学习方式,我们会根据你的情况定制学习计划。
一、本课程是怎么样的一门课程(全面介绍)
1.1、课程的背景
Cocos2d-x 是一个支持多平台的 2D 手机游戏引擎,使用 C++ 开发,基于OpenGL ES,基于Cocos2d-iphone,支持 WOPhone, iOS 4.1, Android 2.1 及更高版本, WindowsXP & Windows7,WindowsPhone 8。
Cocos2d-x引擎在国内手机游戏开发使用的份额接近70%,而国外使用份额则是接近25%,在苹果APP排行榜top10里面,有7个都是用cocos2d-x引擎开发的。
1.2、课程内容简介
本课程由浅入深的介绍Cocos2d-x的开发流程。从软件使用到API接口的使用,从成品到优化。介绍整个Cocos2d-x的基本开发过程及开发中碰到的基础问题进行深入讲解。对代码重构及代码优化做出示例,让学员能逐步的了解Cocos2d-x开发的注意点。
讲解Cocos2d-x的使用,使用C++编写Cocos2d-x及Cocos2d-x的介绍和游戏简单AI的编写,让学员能够把握Cocos2d-x开发的方向,成为一名合格的游戏开发人员。
1.3、课程大纲
第一讲:Cocos2d-x 简介及基础知识
第二讲:Cocos2d-x 基本理论知识
第三讲:Cocos2d-x 环境搭建&
第四讲:Cocos2d-x 之HelloWorld解析
第五讲:Cocos2d-x 游戏框架设计
第六讲:Cocos2d-x 坐标系及文字
第七讲:Cocos2d-x 菜单及场景(一)
第八讲:Cocos2d-x 菜单及场景(二)
第九讲:Cocos2d-x 层、锚点
第十讲:TiledMap 瓦片地图制作与使用
第十一讲:Cocos2d-x 随机数与容器类
第十二讲:TexturePacker与动画
第十三讲:Cocos2d-x 触摸事件(一)
第十四讲:Cocos2d-x 触摸事件(二)
第十五讲:虚拟摇杆和键盘(一)
第十六讲:虚拟摇杆和键盘(二)
第十七讲:TiledMap碰撞检测和视角移动
第十八讲:代码重构
第十九讲:单例模式
第二十讲:动画管理类
第二十一讲:炸弹模块
第二十二讲:怪物模块
第二十三讲:道具模式
第二十四讲:碰撞检测(一)
第二十五讲:碰撞检测(二)
第二十六讲:关卡设计
第二十七讲:音效及用户配置
第二十八讲:游戏完善及win32打包
第二十九讲:Android环境搭建及代码移植
第三十讲:IOS环境搭建及代码调试
第三十一讲:广告嵌入及应用发布
二、为什么需要这么套课程? &&
2.1、企业需要什么?
说明:以下企业需求职位均来自于51job.
职位1、C++ Cocos2d-x开发工程师
职位2、IOS高级软件工程师
更多企业招聘信息请参考:&
2.2、课程学习目标(我们提供什么?)
目标一. 可以让学员快速上手掌握如何使用Cocos2d-x软件使用
目标二. 可以让学员迅速了解Cocos2d-x游戏开发流程
目标三. 可以让学员迅速掌握Cocos2d-x相关知识点
目标四. 可以让学员熟练使用C++编写Cocos2d-x开发
目标六. 熟练掌握Cocos2d-x游戏开发中所使用的相关的工具及类
目标七. 熟练使用Cocos2d-x进行游戏开发
2.3、课程特色
特点一、讲师具有一线的实战经验与丰富的教学经验,课程即讲解案例实现思路、理论与原理又讲解实战技巧与注意事项,即照顾到基顾学员,又照顾到有一定实战经验想要提高自己的学员。
特点二、在每节开始之前先简单回顾上一节所讲的主要内容,并对本节所讲的内容先进行概述,讲解概念、技术要点,设计实现思路等内容,最后总结本次课程的要掌握的要点,讲师授课采用先理论,后实战的方式,由浅入深,符合人们接受知识的自然规律。
特点三、学习的过程中学员要理论和实践相结合,讲过的代码学员自行完成修改和调试,以巩固加深学习效果
2.4、课程亮点
技术亮点一:Cocos2d-x引擎开发零基础入门
技术亮点二:认识TiledMap制作地图
技术亮点三:组件由浅入深的介绍
技术亮点四:TexturePacker与动画开发使用
技术亮点五:地图系统
技术亮点七:游戏简单AI&
技术亮点八:游戏道具及炸弹介绍
技术亮点九:游戏环境设置
技术亮点十:游戏发布注意事项
三、课程真心不错,我可以学吗?
本课程适合于使用Cocos2d-x在Android或IOS进行游戏开发的人员。无需Cocos2d-x基础,只需拥有C、C++编程基础即可,对Android与IOS有基本的了解。本课程由浅入深的介绍Cocos2d-x的开发流程。从成品到优化。介绍整个Cocos2d-x的基本开发过程及开发中碰到的基础问题进行深入讲解。对代码重构及代码优化做出示例,让学员能逐步的了解Cocos2d-x开发的注意点。
使用C++编写Cocos2d-x和游戏AI的编写,让学员能够把握Cocos2d-x开发的方向,成为一名合格的游戏开发人员。
四、我该怎么学,如何才能学好这门课程,给些建议。
4.1、时间上的安排建议
本课程共31讲,如果您时间上充分,建议以每天3-4讲的进度往前学习。
如果您是上班族或您已经有一定的基础了,可以先把C++回顾下
4.2、学习要求
如果您没有基础,建议还是中规中矩的按照课程进度一点一点仔细观看学习,并一定要把看完的视频中的代码自己手敲一遍,以加深理解和记忆
如果您有基础,可不必按步就搬进行,可以拿你感兴趣的部分去学习,但一定要注意实践,并学会举一反三
4.3、讲师建议
1.最好看完视频之后,抛开视频,独立自己去把上课中的示例写一遍,看自己是否理解,如果不正确,可以回过头看再看下视频,如果反复,达到真正理解和熟练掌握的目的。
2.对于项目实战部分,一定要自己亲自动手做一遍,不要满足听完就OK了
3. 建议一般听视频,一般拿个纸和笔,做一些记录和笔记,这是一种非常好的学习习惯。
4. 一定不要过于依赖视频,要学会看API和使用百度,学会思考,学会举一反三
5. 最后祝您学有所成
五、学完这门课程后能做什么?
本课程是属于某个特定的专业技术,掌握该技术后,你可以从事以下职位的相关工作
1.Cocos2d-x游戏开发工程师
六、 &学员常见问题:
常见问题一:使用的有哪些工具软件,软件的版本是多少?
Cocos2d-x官网:http://www.cocos2d-x.org/
Cocos2d-x相关下载:http://www.cocos2d-x.org/download
常见问题二:学这个课程需要什么基础?
讲师回答:拥有一定编程基础的,了解基本C++编程语法的人员
您暂未登录不能收藏!请登录后在进行课程的收藏!

我要回帖

更多关于 cocos2d x tilemap 的文章

 

随机推荐