Cocos2d-x游戏实例-《跑跑跑》制作教程(第二篇)——加入主角
2013-09-06 10:56
519 查看
1. 实体父类因为我觉得玩家和怪物会有一些共同的操作,所以我将玩家和怪物都定为一个实体,于是,我们需要一个实体类作为父类(实体文件夹下创建Entity.h和Entity.cpp文件):
实体类很简单,目前只有一个setSprite方法。 2. 创建玩家现在我们需要一个Player类,虽然玩家表面上看是一个精灵,但是我们不直接让它继承精灵类,我们用组合的方式来做,精灵类只是玩家的一个属性。我们让玩家继承实体类(在实体文件夹下创建Player.h和Player.cpp):
OK,玩家有了,我们把它加到地图里吧~打开我们的TollgateScene.cpp文件,修改init方法,加入如下代码:
OK,编译运行,我们将看到我们的主角(话说这个主角是不是太丑了= =,我找不到又帅又在跑的资源)。
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984333_4184.jpg)
3. 固定玩家出生点(对象层的使用)现在主角的坐标是在代码里写死的,我们还可以更灵活一点,Tiled Map还有一个很厉害的功能,那就是:对象层。其实没有多神奇,就是在地图上的某个位置设置一个对象,然后可以在代码里获取这个对象的信息,比如坐标,对了,就是要坐标~来,打开我们的地图编辑器,点击菜单栏的图层,添加对象层,新建一个对象层:
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984373_1824.jpg)
或者在右下角的图层那里点击新建:
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984357_7551.jpg)
然后将图层命名为“objects”,哇,好形象的名字,噗~
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984394_8067.jpg)
现在我们要绘制对象,点击菜单栏上的这个按钮:
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984408_2529.jpg)
然后在地图上绘制一个矩形,它代表一个对象:
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984419_9708.jpg)
接下来,我们要给这个对象命名,在矩形上右键,选择对象属性,然后命名为PlayerPoint:
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984433_5135.jpg)
OK,我们现在只要在代码里取得PlayerPoint对象,再获得它的x、y属性就可以了。继续打开TollgateScene.cpp文件,修改init函数,在设置玩家精灵坐标的前面,添加以下代码:
简单解释一下。CTMXObjectGroup存放了我们对象层的所有对象,map->objectGroupNamed(“objects”)就是取得了我们刚刚创建的obejects对象层里的所有对象,当然,目前只有一个PlayerPoint对象。怎么取得PlayerPoint对象呢,通过objectNamed函数来获得,获得之后返回的是一个CCDictionary对象,CCDictionary是什么东西?不知道大家用过Java没有?和Java的HashMap是差不多的概念,就是一个key值对应一个value值,然后可以存放很多对这样的key、value。于是,我们从playerPointDic里取得PlayerPoint对象的x、y坐标值,然后给玩家精灵设置坐标就好了。来,编译运行,我们的主角就出现在我们需要的位置了~!
01 | //Entity.h文件 |
02 |
03 | #ifndef __ENTITY_H__ |
04 | #define __ENTITY_H__ |
05 |
06 | #include "cocos2d.h" |
07 |
08 | using namespace cocos2d; |
09 |
10 | class Entity : public CCNode { |
11 | public : |
12 | void setSprite(CCSprite* mSprite); |
13 |
14 | protected : |
15 | CCSprite* mSprite; |
16 | }; |
17 |
18 | #endif</pre> |
19 | <pre class = "cpp" > //Entity.cpp文件 |
20 |
21 | #include "Entity.h" |
22 |
23 | void Entity::setSprite( CCSprite* mSprite ) |
24 | { |
25 | this ->mSprite = mSprite; |
26 | } |
01 | //Player.h文件 |
02 |
03 | #ifndef __PLAYER_H__ |
04 | #define __PLAYER_H__ |
05 |
06 | #include "Entity.h" |
07 |
08 | class Player : public Entity { |
09 | public : |
10 | CREATE_FUNC(Player); |
11 | virtual bool init(); |
12 | }; |
13 |
14 | #endif |
1 | //Player.cpp文件 |
2 |
3 | #include "Player.h" |
4 |
5 | bool Player::init() |
6 | { |
7 | return true ; |
8 | } |
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); |
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984333_4184.jpg)
3. 固定玩家出生点(对象层的使用)现在主角的坐标是在代码里写死的,我们还可以更灵活一点,Tiled Map还有一个很厉害的功能,那就是:对象层。其实没有多神奇,就是在地图上的某个位置设置一个对象,然后可以在代码里获取这个对象的信息,比如坐标,对了,就是要坐标~来,打开我们的地图编辑器,点击菜单栏的图层,添加对象层,新建一个对象层:
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984373_1824.jpg)
或者在右下角的图层那里点击新建:
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984357_7551.jpg)
然后将图层命名为“objects”,哇,好形象的名字,噗~
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984394_8067.jpg)
现在我们要绘制对象,点击菜单栏上的这个按钮:
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984408_2529.jpg)
然后在地图上绘制一个矩形,它代表一个对象:
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984419_9708.jpg)
接下来,我们要给这个对象命名,在矩形上右键,选择对象属性,然后命名为PlayerPoint:
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984433_5135.jpg)
OK,我们现在只要在代码里取得PlayerPoint对象,再获得它的x、y属性就可以了。继续打开TollgateScene.cpp文件,修改init函数,在设置玩家精灵坐标的前面,添加以下代码:
01 | /* 加载对象层 */ |
02 | CCTMXObjectGroup* objGroup = map->objectGroupNamed( "objects" ); |
03 |
04 | /* 加载玩家坐标对象 */ |
05 | CCDictionary* playerPointDic = objGroup->objectNamed( "PlayerPoint" ); |
06 | float playerX = playerPointDic->valueForKey( "x" )->floatValue(); |
07 | float playerY = 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)); |
![](http://benmutou.com/blog/wp-content/uploads/csdn_musicvs/other_site/img_my_1352984465_5300.jpg)
相关文章推荐
- 【木头Cocos2d-x 010】游戏实例-《跑跑跑》制作教程(第二篇)——加入主角
- 【木头Cocos2d-x 011】游戏实例-《跑跑跑》制作教程(第三篇)——让主角跑
- 【木头Cocos2d-x 013】游戏实例-《跑跑跑》制作教程(第五篇)——主角上下移动
- Cocos2d-x游戏实例-《跑跑跑》制作教程(第五篇)——主角上下移动
- 【木头Cocos2d-x 009】游戏实例-《跑跑跑》制作教程(第一篇)——加载地图
- Cocos2d-x游戏实例-《跑跑跑》制作教程(第一篇)——加载地图
- 【木头Cocos2d-x 014】游戏实例-《跑跑跑》制作教程(第六篇)——添加障碍物
- Cocos2d-x游戏实例-《跑跑跑》制作教程(第四篇)——地图卷动
- 【木头Cocos2d-x 009】游戏实例-《跑跑跑》制作教程(第一篇)——加载地图
- Cocos2d-x游戏实例-《跑跑跑》制作教程(第六篇)——添加障碍物
- 【木头Cocos2d-x 015】游戏实例-《跑跑跑》制作教程(第七篇)——添加能吃的物品以及胜利条件
- 【木头Cocos2d-x 012】游戏实例-《跑跑跑》制作教程(第四篇)——地图卷动
- Cocos2d-x游戏实例-《跑跑跑》制作教程(第七篇)——添加能吃的物品以及胜利条件
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第四步--地图循环&主角加入动作
- (译)如何使用cocos2d制作基于tile地图的游戏教程:第一部分
- 10. 如何使用cocos2d制作基于tile地图的游戏教程:第一部分
- wp7使用Cocos2d-X for XNA制作一个塔防类游戏 (二)在游戏中加入地图和怪物。(上)
- (译)如何使用cocos2d制作基于tile地图的游戏教程:第一部分
- 游戏实例之《跑跑跑》(一)——地图生成和添加主角
- 12. 加入敌人和战斗:如果使用cocos2d制作基于tiled地图的游戏:第三部分