上篇回顾
上篇中,蛤蟆学习了OrbitCamera的使用,并了解了其大概。虽然那个OrbitCamera::create函数中参数比较难理解,但是我们还是抽象的尝试说明了一下。呵呵,这次蛤蟆学习如何用屏幕锁定精灵的运行。
理论介绍
首先我们来看下 继承关系如下。
Follow直接继承于Action类的,看上去还挺老资格的,其实也是老资格的。谁让人家辈分靠前呢。
类的创建函数是:
static Follow* create |
( |
Node * |
followedNode, |
const Rect & |
rect = Rect::ZERO
|
||
) |
参数中followedNode表示要跟随的Node。Rect表示边界,当 rect
为 Rect::ZERO时 表示没有边界.
具体步骤
我们还是在HelloWorld.cpp文件中找到
bool
HelloWorld::init()函数,加入如下代码。
auto grossini =
Sprite::create("grossini.png");
addChild(grossini,0, 2);
auto s =
Director::getInstance()->getWinSize();
grossini->setPosition(Vec2(0, s.height / 2));
auto move =
MoveBy::create(2,Vec2(s.width * 3, 0));
auto move_back = move->reverse();
auto seq =
Sequence::create(move,move_back,
nullptr);
auto rep =
RepeatForever::create(seq);
grossini->runAction(rep);
this->runAction(Follow::create(grossini,Rect(0, 0, s.width * 3 , s.height)));
编译运行后,小伙伴们发现了什么?
没错,就是精灵运动到哪里,咱们的屏幕也跟踪到了哪里,是不是很炫?
感觉像拍电影有没有? 蛤蟆感觉这个技能好棒,我们可以同这个来防止咱们的主角 走出屏幕哈。
代码解释
下面我们来解释下代码的含义:
auto grossini =
Sprite::create("grossini.png");//添加一个精灵
addChild(grossini,0, 2);//增加到HelloWorld层中
auto s =
Director::getInstance()->getWinSize();//获取窗口大小
grossini->setPosition(Vec2(0, s.height / 2));//设置位置
auto move =
MoveBy::create(2,Vec2(s.width * 3, 0));//创建moveby动作
auto move_back = move->reverse();//创建moveby的相反动作
auto seq =
Sequence::create(move,move_back,
nullptr);//创建一串动作
auto rep =
RepeatForever::create(seq);//创建不断重复动作
grossini->runAction(rep);//精灵运行该动作
this->runAction(Follow::create(grossini,Rect(0, 0, s.width * 3 , s.height)));// 这就是跟随的函数,
表示HelloWorld的层调用这个跟随,跟随的对象时grossini这个精灵,范围是一个矩形,四个定点是(0, 0, s.width * 3 , s.height)。超出个范围就不会再跟踪了。
总结
本次蛤蟆记录Follow的基本使用,下伙伴们可以尝试下。这个Follow类还是比较有意思的哈。
瘸腿蛤蟆笔记19-cocos2d-x-3.2 屏幕锁定精灵运动