1.  实体父类

因为我觉得玩家和怪物会有一些共同的操作,所以我将玩家和怪物都定为一个实体,于是,我们需要一个实体类作为父类(实体文件夹下创建Entity.h和Entity.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.h和Player.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对象,再获得它的x、y属性就可以了。

继续打开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没有?和Java的HashMap是差不多的概念,就是一个key值对应一个value值,然后可以存放很多对这样的key、value。

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

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

本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366384,如需转载请自行联系原作者

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

  1. 游戏建模次世代角色模型制作教程,内藏超级无敌干货!

    游戏建模次世代角色模型制作整个制作的流程分为:原画设定阶段.中模阶段.高模阶段.低模阶段和贴图.' 原画设定阶段 关于此阶段的审核 此阶段需要自我审核,如果有疑问需要和组长.负责人以及主美进行沟通并理 ...

  2. 游戏建模手绘角色模型制作教程

    随着游戏行业的飞速发展,很多人都想要学习游戏制作知识,那么你知道游戏低模角色是怎么制作的呢?下面是游戏手绘角色制作教程,一起来学习吧! 确实现在有很多零基础的小白都在学习建模,毕竟学软件真的没有什么难 ...

  3. [游戏开发]Python打表工具系列 [第二篇] [打表流程描简述]

    [上一篇链接] [游戏开发]Python打表工具系列 [第一篇][IDE开发环境部署] VSCode Python环境调试_Little丶Seven的博客-CSDN博客 [前言] 第二篇文章是对流程的 ...

  4. 【饥荒mod制作吧第二篇】mod制作工具下载资源!

    谢谢大家阅读 饥荒mod制作吧相关博客第二篇 ! Welcome to Don't Starve mod making bar ! [MOD制作工具] 由本人从正版mod tools中提取以及&quo ...

  5. 我的世界java怎么开创造,MOD制作教程JAVA篇

    您尚未登录,立即登录享受更好的浏览体验! 您需要 登录 才可以下载或查看,没有帐号?注册(register) x 本帖最后由 heidada 于 2011-5-12 21:33 编辑 首先我阅读了这个 ...

  6. 武林外传辅助工具详细制作过程[第二篇:查看数据]

    1.我们可以用CE打开武林外传.运行CE,按照下图的次序打开(...\武林外传\element\elementclient.exe) 2.游戏启动后,别忘了选择游戏窗口. 3.这是游戏中人物的数据. ...

  7. 81款国学游戏开发教程第二篇(飞刀问答)

    本篇讲述的是将飞刀游戏和问答游戏结合到一块的一款国学游戏.本文要注意的知识点有粒子效果的使用以及文字格式的使用,比如文字左对齐和换行的代码,要多多留心. 先看截图 下面是代码 (function(){ ...

  8. 实例讲解webpack的基本使用第二篇

    这一篇来讲解一下如何设置webpack的配置文件webpack.config.js 我们新建一个webpack-demo的项目文件夹,然后安装webpack 执行如下命令 在项目文件夹下,建一个dis ...

  9. CG动画制作项目第二篇:分镜的绘制

    上一周我们开始了前期的准备工作和剧本的敲定,那么这一周开始我们进行的是分镜头的绘制和故事板的完成,部分效果如下图: 分镜头的绘制耗时较长,每画一个镜头大约需要消耗一个小时的时间. 镜头的绘制不一定需要 ...

  10. 学籍管理系统制作教程第二天之 用户登陆界面(三层)

    最近工作比较忙,所以没有连续的来写,今天有空了继续前面的 今天做用户登陆界面,使用三层架构,那么我就需要先理解什么是三层和为什么使用三层. 第一:什么是三层,UI表现层也就是界面,放各种界面如登陆界面 ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装OpenResty 1.9.7.4
  2. 计算机设备采购申请,办公室采购电脑请示报告
  3. 每个人都要在自己的“时区”里找到自己的快乐
  4. 史上最低估自己的天才科学家!预言自己的发现无用,没想到影响全世界,可他却在37岁..........
  5. 炫彩渐变海报素材模板,可运用到海报、电商设计等方面
  6. Jupyter中显示数据data时只显示省略号不显示完整数据
  7. wordpress建立二级导航菜单
  8. python中去除列表重复元素的方法汇总
  9. 64脚和小于64脚的STM32进行AD时注意,参照电源处理方法(转)
  10. 高级项目管理-3、项目立项、变更、整体管理
  11. 用计算机对医学图像做后处理,医学影像学中图像数字化的运用
  12. jsp学习—虚拟主机
  13. 永硕E盘 - ys168.com 免费网盘右侧广告关闭方法
  14. 正确开启用户实体行为分析(UEBA)番外篇:SIEM与UEBA
  15. 实现一个简易的富文本编辑器(二):给富文本添加自定义事件
  16. Kahan's Summation Formula原理—它是如何处理大数吃小数的
  17. UsageStatsService之坑:一个XML解析异常导致的开机动画死循环
  18. CentOS7 之 修改主机名
  19. W10安装NoteBook(一个Python笔记软件)及使用方法
  20. ArcMap中饼图显示数值的方法

热门文章

  1. 蓝桥杯 ADV-98 算法提高 约数个数
  2. 1032. 挖掘机技术哪家强(20)-PAT乙级真题
  3. 蓝桥杯 ADV-134算法提高 校门外的树
  4. 西安电子科技计算机专业,2020西安电子科技大学计算机专业课改考
  5. hive中实现行转列_Hive之行转列lateral view用法
  6. mysql 时间语句【集锦】
  7. Oracle监控的关键指标有哪些
  8. JDBC连接数据库教程,以postgreSQL为例
  9. SpringSecurity应用(一)
  10. Android:四大架构的优缺点,你真的了解吗? 1