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种操作吧:向左冲、向右冲、放屁。(小若:等等!放屁又是怎么回事?)
放屁就是往下冲,嗯。
假设大家还记得主角是怎么加入初始推力的话,那这三种操作就非常easy了。直接看代码吧,首先加入几个函数声明,如今的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));
- }
怎么样?非常easy吧,看到quickMove函数没?它给主角加入的推力是特别大的~
但是,怎么測试呢?怎么调用这些函数?没button吖…
对,没button,于是,我们又要做一下思维跳跃了…
下一篇,简介一下Cocostudio的UI编辑器,我们用它来编写几个button。
Cocos2d-x3.0游戏实例之《别救我》第四篇——乱入的主角的更多相关文章
- Cocos2d-x3.0游戏实例《不要救我》第十篇(结束)——使用Json配置数据类型的怪物
如今我们有2种类型的怪物,并且创建的时候是写死在代码里的,这是要作死的节奏~ 所以.必须可配置.不然会累死人的. ; i < size; ++i) { int id = root[i][&quo ...
- Cocos2d-x3.0游戏实例《不要救我》第一章——前言
我们可以学习? 这是一个非常easy游戏.但更多的东西用(对于初学者).至少,对于它的一个例子,有点多. 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www.benm ...
- Cocos2d-x3.0游戏实例《不要救我》三——背景滚动周期
好.让我们来解释一下这个无限循环滚动的背景.这方面的知识一直讲到烂.我以前的文章还介绍了.所以不是那么特别清楚. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www. ...
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第四步--地图循环&主角加入动作
说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...
- Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编辑器
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/musicvs/article/details/25368273 好吧.我真心全然搞不懂.我如今仅仅只 ...
- Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界
这篇我要给大家介绍两个知识点: 1. 创建游戏物理世界 2. 没了(小若:我噗) 害怕了?不用操心.这太简单了~! 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www ...
- Cocos2d-x3.0游戏实例之《别救我》第七篇——物理世界的碰撞检測
事实上我也非常吃惊-居然写到第七篇了,我估计也就是四篇的内容,感觉非常奇妙,我也不会非常唠叨什么吖); // 0001 ); // 0001 ); // 0001 这样我们才干监听到它们的碰 ...
- Cocos2d-x3.0游戏实例之《别救我》第六篇——从代码中获取UI控件
这篇的内容非常easy,获取UI控件,然后使用它. 还记得我们在UI编辑器中给三个button分别命名了吧? 如今要用上了. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http ...
- Cocos2D v2.0至v3.x简洁转换指南(四)
实现通用的update方法 在Cocos2d 2.x你需要2个步骤去实现在每帧调用update方法: // 1) schedule update [self scheduleUpdate]; ... ...
随机推荐
- 5 Logistic回归(二)
5.2.4 训练算法:随机梯度上升 梯度上升算法:在每次更新回归系数时都需要遍历整个数据集,在数十亿样本上该算法复杂度太高. 改进方法:随机梯度上升算法:一次仅用一个样本点更新回归系数. 由于可以在新 ...
- 线程间使用socket通信的计算器
该程序是处理平时的算数运算,程序也没有什么特别之处,只是将所有运算分开运算,每个函数(线程)处理不同的运算符号里面的运算,然后将所有结果都汇总到main函数中进行最后汇总(相加减)运算,每个函数内都处 ...
- Couldn't read row 0, col -1 from CursorWindow
java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Curso ...
- JS---DOM概述
DOM DOM:文档对象模型document object model DOM三层模型: DOM1:将HTML文档封装成对象 DOM2:将XML文档封装成对象 DOM3:将XML文档封装成对象 DOM ...
- Android使用VideoView播放网络视频
Android支持播放网络上的视频.在播放网络上的视频时,牵涉到视频流的传输,往往有两种协议,一种是HTTP,一种是RTSP.这 两种协议最大的不同是,HTTP协议,不支持实时流媒体的播放,而RTSP ...
- 关于cocos2d安装时编译不成功(个人心得)
在解压cocos2d执行vs2010.sln时错误发生不能成功生成.遇到这样的错误: 1>c:\program files\microsoft sdks\windows\v7.0a\includ ...
- Sicily 4495. Print permutations
http://soj.me/4495 按字典序生成字符串的全排列 直接递归: #include <iostream> #include <string> #include &l ...
- 从 NSURLConnection 到 NSURLSession
iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载系统的彻底重构. 现在已经有人在深入苹果的网络层基础架构的地方做研究了,所以我 ...
- C语言函数可变参数列表
C语言允许使用可变参数列表,我们常用的printf函数即为可变参数函数,C标准库提供了stdarg.h为我们提供了这方面支持:该头文件提供了一些类型和宏来支持可变参数列表,包括类型va_list,宏v ...
- 数据库MySQL多个数据库服务冲突
一.目标名称 MySQL 二.目标版本 mysql-5.6.24-win32.1432006610.zip 三.环境信息 系统:windows 7 旗舰版 防火墙:关闭 —— 注意:如果防火墙不关闭 ...