Cocos2d-x3.0游戏实例之《别救我》第四篇——乱入的主角
好了,前面说了那么多废话,终于要进入正题了(等等,敢情前面你都是在耍我们么?)
笨木头花心贡献,啥?花心?不呢,是用心~
转载请注明,原文地址: http://www.benmutou.com/blog/archives/872
文章来源:笨木头与游戏开发
添加主角实在是太简单了,这个主角要拥有以下一些超能力:
1. 可爱的样子
2. 不会飞
3. 会往下掉
4. 撞墙会反弹
5. 可以左右移动
6. 必杀技是:放屁
(小若:不知道是不是幻觉,总感觉这些能力是个人就能拥有)
(木头:哦呵呵,旁白,别傻了,就第一条你就无法拥有)
本篇教程要用到的图片只有这张:
player.png
让主角出现
上面说了这么多超能力,感觉很复杂,我们还是从简单做起吧,让主角先出现在场景里。
创建一个Player类,头文件如下:
- #ifndef Player_H
- #define Player_H
- #include "cocos2d.h"
- USING_NS_CC;
- class Player : public Node
- {
- public:
- Player();
- ~Player();
- CREATE_FUNC(Player);
- virtual bool init();
- void logic(float dt);
- private:
- CC_SYNTHESIZE(int, m_iHP, iHP);
- };
- #endif
OK,很明显,主角也有一个logic函数,先留空什么都不做,然后主角还有一个HP属性,也先留着。
看看CPP文件:
- #include "Player.h"
- Player::Player()
- {
- m_iHP = 100;
- }
- Player::~Player()
- {
- }
- bool Player::init()
- {
- auto playerSp = Sprite::create("player.png");
- this->addChild(playerSp);
- auto body = PhysicsBody::createCircle(playerSp->getContentSize().width * 0.4f);
- body->getShape(0)->setFriction(0);
- body->getShape(0)->setRestitution(1.0f);
- body->setCategoryBitmask(1); // 0001
- body->setCollisionBitmask(1); // 0001
- body->setContactTestBitmask(1); // 0001
- this->setPhysicsBody(body);
- /* 给角色添加推力 */
- this->getPhysicsBody()->applyImpulse(Vect(0, -40000));
- return true;
- }
- void Player::logic(float dt)
- {
- }
前面已经介绍过怎么创建物理对象了,大家应该不会生疏了,用createCircle创建圆形刚体,为什么是圆形不是正方形呢?因为主角的图片不太正方,用圆形在碰撞的时候会好一些。
然后通过getShape(0)获取刚体的皮肤,setFriction设置摩擦力,setRestitution设置弹力。
最后,给刚体一个初始的向下推力(applyImpulse),这样主角就会往下掉,是的,这个游戏的主角就是一直往下掉,然后碰到东西弹来弹去~
OK,测试一下吧,在TollgateScene的init函数里添加Player对象:
- bool TollgateScene::init()
- {
- if (!Layer::init())
- {
- return false;
- }
- /* 创建主角 */
- Size visibleSize = Director::getInstance()->getVisibleSize();
- m_player = Player::create();
- m_player->setPosition(Point(visibleSize.width * 0.5f, visibleSize.height * 0.85f));
- this->addChild(m_player, 5);
- this->schedule(schedule_selector(TollgateScene::logic));
- return true;
- }
主角的初始位置是屏幕中间上方。
好了,运行一下,效果如图所示:
你应该会看到主角一开始往下掉,然后碰到下面的锯齿就反弹~
证明我们的物理世界已经在起作用了~
左右喷射
好了,现在主角只会往下掉,那还玩什么呢?我们给主角赋予3种操作吧:向左冲、向右冲、放屁。(小若:等等!放屁又是怎么回事?)
放屁就是往下冲,嗯。
如果大家还记得主角是怎么添加初始推力的话,那这三种操作就很简单了。直接看代码吧,首先添加几个函数声明,现在的Player.h文件如下:
- #ifndef Player_H
- #define Player_H
- #include "cocos2d.h"
- USING_NS_CC;
- class Player : public Node
- {
- public:
- Player();
- ~Player();
- CREATE_FUNC(Player);
- virtual bool init();
- void moveToRight();
- void moveToLeft();
- void quickMove();
- void logic(float dt);
- private:
- CC_SYNTHESIZE(int, m_iHP, iHP);
- };
- #endif
为什么放屁的函数名要叫做quickMove呢?那是因为放屁是大招,冲得特别快,所以我选择了这个特别的名字。(小若:别鬼扯了,不就是不知道放屁的英文怎么写嘛)
O_O那个,我们别里旁白,继续….
看看三个函数的实现:
- void Player::moveToRight()
- {
- this->getPhysicsBody()->applyImpulse(Vect(50000, 0));
- }
- void Player::moveToLeft()
- {
- this->getPhysicsBody()->applyImpulse(Vect(-50000, 0));
- }
- void Player::quickMove()
- {
- this->getPhysicsBody()->applyImpulse(Vect(0, -200000));
- }
怎么样?很简单吧,看到quickMove函数没?它给主角添加的推力是特别大的~
可是,怎么测试呢?怎么调用这些函数?没按钮吖…
对,没按钮,于是,我们又要做一下思维跳跃了…
下一篇,简单介绍一下Cocostudio的UI编辑器,我们用它来编写几个按钮。
Cocos2d-x3.0游戏实例之《别救我》第四篇——乱入的主角相关推荐
- Cocos2d-x3.0游戏实例《别救我》目录导航(共10篇,已完结)
这个5.1假期还真不错,有个小惊喜,那就是,我某个游戏今天的下载量爆表了,突破历史最高点~! 于是,我决定写一个新的游戏实例教程,以示庆祝~ 啊才怪啊~!这教程5.1之前就在写了,我还因此暂停了差不多 ...
- Cocos2d-x3.0游戏实例《不要救我》第一章——前言
我们可以学习? 这是一个非常easy游戏.但更多的东西用(对于初学者).至少,对于它的一个例子,有点多. 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www.benm ...
- Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物...
如今我们有2种类型的怪物,并且创建的时候是写死在代码里的,这是要作死的节奏~ 所以.必须可配置.不然会累死人的. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http://www ...
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第四步--地图循环amp;主角加入动作
说明:这里是借鉴:晓风残月 前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...
- Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编辑器
好吧,我真心全然搞不懂.我如今仅仅只是是写了3个类而已.怎么就已经到第八篇了?我感觉我说话已经够简单明了毫不唠叨了,真是奇怪.(小若:我噗.噗噗.) 好吧,既然如今主角已经能出现而且进行操作了.那,也 ...
- Cocos2d-x3.0游戏实例之《别救我》第十篇(完结)——用Json配置各类型怪物数据
现在我们有2种类型的怪物,而且创建的时候是写死在代码里的,这是要作死的节奏~ 所以,必须可配置,不然会累死人的. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http://www ...
- 【邪恶古堡】一款手机游戏|塔防类|主角是反派/魔王|敌人是勇士/英雄|需要救公主|放置陷阱/障碍|乱入|安卓|苹果
邪恶古堡 游戏介绍: <邪恶古堡>是一款第一反派视角塔防手游,游戏中,多种陷阱,N套组合供玩家挑战,且多种惊魂主题供玩家挑战!其需要玩家扮演魔王,将公主囚禁在城堡,并在路上设置了各种陷阱和 ...
- Java多线程游戏实例分享2-雷火(手把手教你做个超炫酷的星际争霸)
观前提示: 本文涉及的小成果特别多,即使你不需要写一个和我完全相同的游戏,也可以按照需要查看某些特定功能的实现过程,说不定能够给您的程序开发带来一点小小的启发!PS:结合源代码阅读此博客更加高效. 本 ...
- 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇 http://www.cnblogs.com/lyhabc/p/4678330.html 第二篇 http:// ...
- 7、Cocos2dx 3.0游戏开发找小三之3.0版本号的代码风格
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已 ...
最新文章
- 全国省份和城市数组2
- Mongodb副本集--Out of memory: Kill process 37325 (mongod)
- idea数据库反向生成实体类_asp.net core 系列 21 EF现有数据库进行反向工程
- python求极值(极大值、极小值)
- fullcalendar内容如何默认展示一条其他的点击展示_LinkedIn广告全指南:如何从零开始成为Linkedin广告高手?...
- MongoDB学习笔记~官方驱动的原生Curd操作
- 网络攻防 第六周学习总结
- Stacked injection--堆叠注入--堆查询注入
- Administration interface
- tomcat日志配置——如何查看日志
- 现代优化算法:遗传算法
- 公众号平台服务号、订阅号、企业号区别
- 汉字字符集编码查询_刨根究底字符编码之十——Unicode字符集的字符编码方式...
- Android TableLayout记
- c语言程序设计高速公路超速处罚,高速超速违章处理流程
- ​浙江省交通运输物流信息服务中心平台容灾设备采购二期项目
- python—判断语句练习题05
- eclipse常规使用(Eclipse Jee Oxygen)
- 爬虫训练场项目前端之 Bootstrap 信息提示框,按钮与按钮组,徽章,进度条
- pr里面怎么加css样式,放入pr剪辑中画面不全怎么办?