好了,前面说了那么多废话,最终要进入正题了(等等,敢情前面你都是在耍我们么?)

笨木头花心贡献,啥?花心?不呢,是用心~

转载请注明,原文地址: http://www.benmutou.com/blog/archives/872

文章来源:笨木头与游戏开发

加入主角实在是太简单了,这个主角要拥有以下一些超能力:

1. 可爱的样子

2. 不会飞

3. 会往下掉

4. 撞墙会反弹

5. 能够左右移动

6. 必杀技是:放屁

(小若:不知道是不是幻觉,总感觉这些能力是个人就能拥有)

(木头:哦呵呵,旁白,别傻了,就第一条你就无法拥有)

本篇教程要用到的图片仅仅有这张:

player.png

让主角出现

上面说了这么多超能力,感觉非常复杂,我们还是从简单做起吧,让主角先出如今场景里。

创建一个Player类,头文件例如以下:

  1. #ifndef Player_H
  2. #define Player_H
  3. #include "cocos2d.h"
  4. USING_NS_CC;
  5. class Player : public Node
  6. {
  7. public:
  8. Player();
  9. ~Player();
  10. CREATE_FUNC(Player);
  11. virtual bool init();
  12. void logic(float dt);
  13. private:
  14. CC_SYNTHESIZE(int, m_iHP, iHP);
  15. };
  16. #endif

OK,非常明显,主角也有一个logic函数,先留空什么都不做,然后主角另一个HP属性,也先留着。

看看CPP文件:

  1. #include "Player.h"
  2. Player::Player()
  3. {
  4. m_iHP = 100;
  5. }
  6. Player::~Player()
  7. {
  8. }
  9. bool Player::init()
  10. {
  11. auto playerSp = Sprite::create("player.png");
  12. this->addChild(playerSp);
  13. auto body = PhysicsBody::createCircle(playerSp->getContentSize().width * 0.4f);
  14. body->getShape(0)->setFriction(0);
  15. body->getShape(0)->setRestitution(1.0f);
  16. body->setCategoryBitmask(1);    // 0001
  17. body->setCollisionBitmask(1);   // 0001
  18. body->setContactTestBitmask(1); // 0001
  19. this->setPhysicsBody(body);
  20. /* 给角色加入推力 */
  21. this->getPhysicsBody()->applyImpulse(Vect(0, -40000));
  22. return true;
  23. }
  24. void Player::logic(float dt)
  25. {
  26. }

前面已经介绍过怎么创建物理对象了,大家应该不会生疏了,用createCircle创建圆形刚体,为什么是圆形不是正方形呢?由于主角的图片不太正方,用圆形在碰撞的时候会好一些。

然后通过getShape(0)获取刚体的皮肤,setFriction设置摩擦力,setRestitution设置弹力。

最后,给刚体一个初始的向下推力(applyImpulse),这样主角就会往下掉,是的,这个游戏的主角就是一直往下掉,然后碰到东西弹来弹去~

OK,測试一下吧,在TollgateScene的init函数里加入Player对象:

  1. bool TollgateScene::init()
  2. {
  3. if (!Layer::init())
  4. {
  5. return false;
  6. }
  7. /* 创建主角 */
  8. Size visibleSize = Director::getInstance()->getVisibleSize();
  9. m_player = Player::create();
  10. m_player->setPosition(Point(visibleSize.width * 0.5f, visibleSize.height * 0.85f));
  11. this->addChild(m_player, 5);
  12. this->schedule(schedule_selector(TollgateScene::logic));
  13. return true;
  14. }

主角的初始位置是屏幕中间上方。

好了,执行一下,效果如图所看到的:

 

你应该会看到主角一開始往下掉,然后碰到以下的锯齿就反弹~

证明我们的物理世界已经在起作用了~

左右喷射

好了,如今主角仅仅会往下掉,那还玩什么呢?我们给主角赋予3种操作吧:向左冲、向右冲、放屁。(小若:等等!放屁又是怎么回事?)

放屁就是往下冲,嗯。

假设大家还记得主角是怎么加入初始推力的话,那这三种操作就非常easy了。直接看代码吧,首先加入几个函数声明,如今的Player.h文件例如以下:

  1. #ifndef Player_H
  2. #define Player_H
  3. #include "cocos2d.h"
  4. USING_NS_CC;
  5. class Player : public Node
  6. {
  7. public:
  8. Player();
  9. ~Player();
  10. CREATE_FUNC(Player);
  11. virtual bool init();
  12. void moveToRight();
  13. void moveToLeft();
  14. void quickMove();
  15. void logic(float dt);
  16. private:
  17. CC_SYNTHESIZE(int, m_iHP, iHP);
  18. };
  19. #endif

为什么放屁的函数名要叫做quickMove呢?那是由于放屁是大招,冲得特别快,所以我选择了这个特别的名字。(小若:别鬼扯了,不就是不知道放屁的英文怎么写嘛)

O_O那个,我们别里旁白,继续….

看看三个函数的实现:

  1. void Player::moveToRight()
  2. {
  3. this->getPhysicsBody()->applyImpulse(Vect(50000, 0));
  4. }
  5. void Player::moveToLeft()
  6. {
  7. this->getPhysicsBody()->applyImpulse(Vect(-50000, 0));
  8. }
  9. void Player::quickMove()
  10. {
  11. this->getPhysicsBody()->applyImpulse(Vect(0, -200000));
  12. }

怎么样?非常easy吧,看到quickMove函数没?它给主角加入的推力是特别大的~

但是,怎么測试呢?怎么调用这些函数?没button吖…

对,没button,于是,我们又要做一下思维跳跃了…

下一篇,简介一下Cocostudio的UI编辑器,我们用它来编写几个button。

Cocos2d-x3.0游戏实例之《别救我》第四篇——乱入的主角的更多相关文章

  1. Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物

    如今我们有2种类型的怪物,并且创建的时候是写死在代码里的,这是要作死的节奏~ 所以.必须可配置.不然会累死人的. ; i < size; ++i) { int id = root[i][&quo ...

  2. Cocos2d-x3.0游戏实例《不要救我》第一章——前言

    我们可以学习? 这是一个非常easy游戏.但更多的东西用(对于初学者).至少,对于它的一个例子,有点多. 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www.benm ...

  3. Cocos2d-x3.0游戏实例《不要救我》三——背景滚动周期

    好.让我们来解释一下这个无限循环滚动的背景.这方面的知识一直讲到烂.我以前的文章还介绍了.所以不是那么特别清楚. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www. ...

  4. cocos2d-x 3.0游戏实例学习笔记 《跑酷》第四步--地图循环&amp;主角加入动作

    说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...

  5. Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编辑器

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/musicvs/article/details/25368273 好吧.我真心全然搞不懂.我如今仅仅只 ...

  6. Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界

    这篇我要给大家介绍两个知识点: 1. 创建游戏物理世界 2. 没了(小若:我噗) 害怕了?不用操心.这太简单了~! 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www ...

  7. Cocos2d-x3.0游戏实例之《别救我》第七篇——物理世界的碰撞检測

    事实上我也非常吃惊-居然写到第七篇了,我估计也就是四篇的内容,感觉非常奇妙,我也不会非常唠叨什么吖);    // 0001 );   // 0001 ); // 0001 这样我们才干监听到它们的碰 ...

  8. Cocos2d-x3.0游戏实例之《别救我》第六篇——从代码中获取UI控件

    这篇的内容非常easy,获取UI控件,然后使用它. 还记得我们在UI编辑器中给三个button分别命名了吧? 如今要用上了. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http ...

  9. Cocos2D v2.0至v3.x简洁转换指南(四)

    实现通用的update方法 在Cocos2d 2.x你需要2个步骤去实现在每帧调用update方法: // 1) schedule update [self scheduleUpdate]; ... ...

随机推荐

  1. QT显示GIF图片

    在QT中要显示GIF图片,不能通过单单的添加部件来完成. 还需要手动的编写程序. 工具:QT Creator 新建一个工程,我们先在designer中,添加一个QLabel部件. 如下图: 将QLab ...

  2. WebRTC 音视频开发

    WebRTC 音视频开发 webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译 ...

  3. SQL Server 执行计划重编译的两大情况

    1.与正确性相关的重编译 1.为表或视图添加列,删除列. 2.为表添加约束.默认值.规则,删除约束.默认值.规则. 3.为表或视图添加索引. 4.如果计划用不用索引而这个索引被删除. 5.删除表中的统 ...

  4. [笔记]线性回归&梯度下降

    一.总述 线性回归算法属于监督学习的一种,主要用于模型为连续函数的数值预测. 过程总得来说就是初步建模后,通过训练集合确定模型参数,得到最终预测函数,此时输入自变量即可得到预测值. 二.基本过程 1. ...

  5. python setattr(),getattr()函数

    setattr(object,name,value): 作用:设置object的名称为name(type:string)的属性的属性值为value,属性name可以是已存在属性也可以是新属性. get ...

  6. asp.net 使用my97 datepicker实现前后两个日期的范围界定

    说明:日期选择后,前面的日期小于等后面的日期,后面的日期大于等于前面的日期.点点看就知道了:) - 这里将周末日期不可选.代码如下: <html xmlns="http://www.w ...

  7. JavaScript之向文档中添加元素和内容的方法

    一.非DOM方法添加 1.document.write() <html xmlns="http://www.w3.org/1999/xhtml"> <head&g ...

  8. Javascript 自定义事件 (custom event)

    Javascript 中经常会用到自定义事件.如何创建一个简单的自定义事件呢?在创建自定义的事件之前,我们应该考虑一下和事件有关的东西.例如 click 事件,首先我们要能注册一个click事件(在一 ...

  9. spring mvc 返回json数据的四种方式

    一.返回ModelAndView,其中包含map集 /* * 返回ModelAndView类型的结果 * 检查用户名的合法性,如果用户已经存在,返回false,否则返回true(返回json数据,格式 ...

  10. centos下zookeeper集群搭建

    单机模式: 1)  首先下载zookeeper压缩包, 这里采用zookeeper3.4.8.... wget http://mirror.bit.edu.cn/apache/zookeeper/zo ...