好了,前面说了那么多废话,终于要进入正题了(等等,敢情前面你都是在耍我们么?)
笨木头花心贡献,啥?花心?不呢,是用心~
转载请注明,原文地址: http://www.benmutou.com/archives/872
文章来源:笨木头与游戏开发
添加主角实在是太简单了,这个主角要拥有以下一些超能力:
1. 可爱的样子
2. 不会飞
3. 会往下掉
4. 撞墙会反弹
5. 可以左右移动
6. 必杀技是:放屁
(小若:不知道是不是幻觉,总感觉这些能力是个人就能拥有)(木头:哦呵呵,旁白,别傻了,就第一条你就无法拥有)
本篇教程要用到的图片到这里下载:http://download.csdn.net/detail/musicvs/7392931
让主角出现
上面说了这么多超能力,感觉很复杂,我们还是从简单做起吧,让主角先出现在场景里。
创建一个Player类,头文件如下:
[cce_cpp]
#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
[/cce_cpp]
OK,很明显,主角也有一个logic函数,先留空什么都不做,然后主角还有一个HP属性,也先留着。
看看CPP文件:
[cce_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)
{
}
[/cce_cpp]
前面已经介绍过怎么创建物理对象了,大家应该不会生疏了,用createCircle创建圆形刚体,为什么是圆形不是正方形呢?因为主角的图片不太正方,用圆形在碰撞的时候会好一些。
然后通过getShape(0)获取刚体的皮肤,setFriction设置摩擦力,setRestitution设置弹力。
最后,给刚体一个初始的向下推力(applyImpulse),这样主角就会往下掉,是的,这个游戏的主角就是一直往下掉,然后碰到东西弹来弹去~
OK,测试一下吧,在TollgateScene的init函数里添加Player对象:
[cce_cpp]
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;
}
[/cce_cpp]
主角的初始位置是屏幕中间上方。
好了,运行一下,效果如图所示:
[caption id="attachment_886" align="aligncenter" width="221"]
Cocos2d-x3.0游戏实例之《别救我》第四篇-截图[/caption]
你应该会看到主角一开始往下掉,然后碰到下面的锯齿就反弹~
证明我们的物理世界已经在起作用了~
左右喷射
好了,现在主角只会往下掉,那还玩什么呢?我们给主角赋予3种操作吧:向左冲、向右冲、放屁。
(小若:等等!放屁又是怎么回事?) 放屁就是往下冲,嗯。
如果大家还记得主角是怎么添加初始推力的话,那这三种操作就很简单了。直接看代码吧,首先添加几个函数声明,现在的Player.h文件如下:
[cce_cpp]
#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
[/cce_cpp]
为什么放屁的函数名要叫做quickMove呢?那是因为放屁是大招,冲得特别快,所以我选择了这个特别的名字。
(小若:别鬼扯了,不就是不知道放屁的英文怎么写嘛) O_O那个,我们别里旁白,继续....
看看三个函数的实现:
[cce_cpp]
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));
}
[/cce_cpp]
怎么样?很简单吧,看到quickMove函数没?它给主角添加的推力是特别大的~
可是,怎么测试呢?怎么调用这些函数?没按钮吖...
对,没按钮,于是,我们又要做一下思维跳跃了...
下一篇,简单介绍一下Cocostudio的UI编辑器,我们用它来编写几个按钮。