博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cocos2d-x3.0游戏实例之《别救我》第四篇——乱入的主角
阅读量:6448 次
发布时间:2019-06-23

本文共 2845 字,大约阅读时间需要 9 分钟。

 

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

 

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

转载请注明,原文地址: 

文章来源:

 

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

1. 可爱的样子

2. 不会飞

3. 会往下掉

4. 撞墙会反弹

5. 能够左右移动

6. 必杀技是:放屁

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

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

 

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

player.pngplayer.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(500000));
  4. }
  5. void Player::moveToLeft()
  6. {
  7.     this->getPhysicsBody()->applyImpulse(Vect(-500000));
  8. }
  9. void Player::quickMove()
  10. {
  11.     this->getPhysicsBody()->applyImpulse(Vect(0-200000));
  12. }

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

 

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

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

 

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

 

 

 

你可能感兴趣的文章
Google 搜索结果正式 AMP 化
查看>>
《树莓派Python编程入门与实战》——第2章 认识Raspbian Linux发行版 2.1 了解Linux...
查看>>
阿里感悟 (十七)- 计划和规划能力
查看>>
《Java并发编程从入门到精通》显示锁Lock和ReentrantLock
查看>>
《Servlet、JSP和Spring MVC初学指南》——1.12 小结
查看>>
《精通软件性能测试与LoadRunner最佳实战》—第2章2.5节 测试脚本编写
查看>>
《解读NoSQL》——第1章 NoSQL:明智的选择
查看>>
算力即权力
查看>>
《Nmap渗透测试指南》—第6章6.8节目标主机随机排序
查看>>
《Unity 3.x游戏开发实例》——2.8节百分之一的灵感
查看>>
阿里云前端周刊 - 往期回顾(1-3)
查看>>
《Axure RP8 网站和APP原型制作 从入门到精通》一第1章 设计过程概述1.1 设计过程...
查看>>
《嵌入式Linux应用开发完全手册》——1.2 基于ARM处理器的嵌入式Linux系统
查看>>
“数”成金|大数据的正确打开及使用方法
查看>>
《精通Unreal游戏引擎》一导读
查看>>
如何把老旧笔记本变成一部 Chromebook
查看>>
阿里云肖力:专业云计算服务商有能力提前解决勒索病毒隐患
查看>>
Linux下打包压缩war、解压war包和jar命令
查看>>
Vertica的这些事<六>—— SQL Server、Oracle、MySQL和Vertica数据库常用函数对比...
查看>>
《C语言及程序设计》实践参考——复数结构体
查看>>