Cocos2d-x游戏实例-《跑跑跑》制作教程(第二篇)——加入主角

简介:

1.  实体父类

因为我觉得玩家和怪物会有一些共同的操作,所以我将玩家和怪物都定为一个实体,于是,我们需要一个实体类作为父类(实体文件夹下创建Entity.hEntity.cpp文件)

01 //Entity.h文件
02  
03 #ifndef __ENTITY_H__
04 #define __ENTITY_H__
05  
06 #include "cocos2d.h"
07  
08 usingnamespace cocos2d;
09  
10 classEntity : publicCCNode {
11 public:
12     voidsetSprite(CCSprite* mSprite);
13  
14 protected:
15     CCSprite* mSprite;
16 };
17  
18 #endif</pre>
19 <preclass="cpp">//Entity.cpp文件
20  
21 #include "Entity.h"
22  
23 voidEntity::setSprite( CCSprite* mSprite )
24 {
25     this->mSprite = mSprite;
26 }

实体类很简单,目前只有一个setSprite方法。

 

2. 创建玩家

现在我们需要一个Player类,虽然玩家表面上看是一个精灵,但是我们不直接让它继承精灵类,我们用组合的方式来做,精灵类只是玩家的一个属性。我们让玩家继承实体类(在实体文件夹下创建Player.hPlayer.cpp):

01 //Player.h文件
02  
03 #ifndef __PLAYER_H__
04 #define __PLAYER_H__
05  
06 #include "Entity.h"
07  
08 classPlayer : publicEntity {
09 public:
10     CREATE_FUNC(Player);
11     virtualbool init();
12 };
13  
14 #endif
1 //Player.cpp文件
2  
3 #include "Player.h"
4  
5 boolPlayer::init()
6 {
7     returntrue;
8 }

OK,玩家有了,我们把它加到地图里吧~

打开我们的TollgateScene.cpp文件,修改init方法,加入如下代码:

01 /* -------------- 加载玩家 --------------- */
02     CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
03     CCSprite* playerSprite = CCSprite::create("sprite/player1.png");
04     playerSprite->setPosition(ccp(100, visibleSize.height / 2));
05  
06     /* 精灵添加到地图 */
07     map->addChild(playerSprite);
08  
09     /* 将精灵绑定到玩家对象上 */
10     Player* mPlayer = Player::create();
11     mPlayer->setSprite(playerSprite);

OK,编译运行,我们将看到我们的主角(话说这个主角是不是太丑了= =,我找不到又帅又在跑的资源)。

 

3. 固定玩家出生点(对象层的使用)

现在主角的坐标是在代码里写死的,我们还可以更灵活一点,Tiled Map还有一个很厉害的功能,那就是:对象层。

其实没有多神奇,就是在地图上的某个位置设置一个对象,然后可以在代码里获取这个对象的信息,比如坐标,对了,就是要坐标~

来,打开我们的地图编辑器,点击菜单栏的图层,添加对象层,新建一个对象层:

或者在右下角的图层那里点击新建:

 

然后将图层命名为“objects”,哇,好形象的名字,噗~

 

现在我们要绘制对象,点击菜单栏上的这个按钮:

 

然后在地图上绘制一个矩形,它代表一个对象:

 

接下来,我们要给这个对象命名,在矩形上右键,选择对象属性,然后命名为PlayerPoint

 

OK,我们现在只要在代码里取得PlayerPoint对象,再获得它的xy属性就可以了。

继续打开TollgateScene.cpp文件,修改init函数,在设置玩家精灵坐标的前面,添加以下代码:

01 /* 加载对象层 */
02     CCTMXObjectGroup* objGroup = map->objectGroupNamed("objects");
03  
04     /* 加载玩家坐标对象 */
05     CCDictionary* playerPointDic = objGroup->objectNamed("PlayerPoint");
06     floatplayerX = playerPointDic->valueForKey("x")->floatValue();
07     floatplayerY = playerPointDic->valueForKey("y")->floatValue();
08  
09     /* -------------- 加载玩家 --------------- */
10     CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
11     CCSprite* playerSprite = CCSprite::create("sprite/player1.png");
12     playerSprite->setPosition(ccp(playerX, playerY));

简单解释一下。

CTMXObjectGroup存放了我们对象层的所有对象,map->objectGroupNamed(“objects”)就是取得了我们刚刚创建的obejects对象层里的所有对象,当然,目前只有一个PlayerPoint对象。

怎么取得PlayerPoint对象呢,通过objectNamed函数来获得,获得之后返回的是一个CCDictionary对象,CCDictionary是什么东西?不知道大家用过Java没有?和JavaHashMap是差不多的概念,就是一个key值对应一个value值,然后可以存放很多对这样的keyvalue

于是,我们从playerPointDic里取得PlayerPoint对象的xy坐标值,然后给玩家精灵设置坐标就好了。

来,编译运行,我们的主角就出现在我们需要的位置了~

















本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366384,如需转载请自行联系原作者
相关文章
|
6月前
|
图形学
【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)
【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)
205 0
|
6月前
|
移动开发 HTML5
经典的泡泡龙游戏源码免费下载
HTML5泡泡龙冒险小游戏是一款休闲网页游戏,游戏玩法是玩家从下方中央的弹珠发射台射出彩珠,多于3个同色珠相连则会消失。
45 2
经典的泡泡龙游戏源码免费下载
|
6月前
|
图形学
【用unity实现100个游戏之17】从零开始制作一个类幸存者肉鸽(Roguelike)游戏5(附项目源码)(下)
【用unity实现100个游戏之17】从零开始制作一个类幸存者肉鸽(Roguelike)游戏5(附项目源码)
99 0
|
7月前
|
开发者
泡泡龙游戏开发实战教程(8):完整流程
泡泡龙游戏开发实战教程(8):完整流程
121 0
|
7月前
微信小游戏制作工具关于游戏屏幕适配,看这篇就够了!
微信小游戏制作工具关于游戏屏幕适配,看这篇就够了!
253 0
|
缓存 图形学
《unity游戏优化》第一章读书笔记
《unity游戏优化》第一章读书笔记