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

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

转载请注明,原文地址: 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. OC中NSArray的使用

    不可变数组类容器类,管理一组对象类型的数据.   元素是有序的,索引值从0开始  数组中存储的元素必须是对象,类型任意.   创建数组对象,使⽤用实例初始化或便利构造器.获取元素个数.根据索引值获取对 ...

  2. SQL Server 的三种用户自定义函数

    create function fun_A()   #标题函数.create function fun_name() returns output_type as begin return value ...

  3. Oracle EBS-SQL (BOM-6):检查物料失效但BOM中未失效的数据.sql

    select msi.segment1                   装配件编码 , msi.description                  装配件描述 , msi.item_type ...

  4. WinSetupFromUSB 使用教程

    WinSetupFromUSB 是个功能非常强大的自启动U盘制作工具,可以完成WinXP/Vista/Win7的U盘安装,完成同盘多Windows安装源的U盘制作以及Linux 启动安装等功能.用Wi ...

  5. Get Intellisense for .axml files in Visual Studio

    原文Get Intellisense for .axml files in Visual Studio So in order to get some intellisense support for ...

  6. iOS中Blocks的介绍

    1. 什么是Blocks Blocks是C语言的扩充功能.如果用一句话来概括就是:带有自动变量的匿名函数. 第一次看见Blocks的时候,感觉很类似C语言的函数指针,尤其是Block类型变量,更是有极 ...

  7. C++中实现链表的删除和颠倒

    MFC工程中关于链表的操作 1.对于给定的整数n,编写算法删除链表中第n个节点,该链表的第一个节点由first指向. 由于C++中没有关于node的标准头文件,要先手动定义node类,此处只定义了简单 ...

  8. nfs nobody,nobody 需要在nfs客户端修改从nfs服务器端共享过来的目录怎么办?

    1,加入我们使用nfs共享安装oracle, 安装oracle需要修改base,data,orainventory等等目录及自目录的属主及权限,一般会继承nfs客户端目录的权限及属主 groupadd ...

  9. javascript数组去重算法-----5

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Brew install for mac

    安装命令例如以下: curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --st ...