Cocos2d-x中,Follow类的使用

Follow类是直接继承自Action类的,地位很高啊。

API文档中对于它的作用介绍如下:

Follow is an action that "follows" a node.

还是一贯的言简意赅。

Follow类的Create函数如下:

static Follow* create(Node *followedNode, const Rect& rect = Rect::ZERO);
可以看出在创建Follow动作时,需要传入要跟踪的Node对象和跟踪的范围,范围是一个Rect类型的对象,当Node移动出这个范围后,会停止对其进行跟踪,并且当其再次回到范围中时,跟踪会再次启动。如果范围设置为Rect::ZERO,那么不管该对象移动到哪儿,Follow都会一直对其跟踪。

官方的演示中,有Follow的演示,其中的代码如下:

    auto s = Director::getInstance()->getWinSize();

    DrawNode* drawNode = DrawNode::create();
    float x = s.width*2 - 100;
    float y = s.height;
    
    Vec2 vertices[] = { Vec2(5,5), Vec2(x-5,5), Vec2(x-5,y-5), Vec2(5,y-5) };
    drawNode->drawPoly(vertices, 4, true,  Color4F(CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), 1));
    
    this->addChild(drawNode);

    _grossini->setPosition(-200, 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 * 2 - 100, s.height)));
演示为了表现的更加明白,首先创建了一个边框。然后把精灵的位置放在屏幕的左边,并且让其向屏幕的右边移动。然后创建一个循环,使其一直重复这个动作。

最后创建了一个Follow动作,并且让this执行。这样就完成了Follow动作的创建和执行。


查看Follow类的源码,又有了新的发现,是两个内联函数,定义如下:

inline bool isBoundarySet() const { return _boundarySet; }
inline void setBoundarySet(bool value) { _boundarySet = value; }
可以看出isBoudarySet函数返回一个bool类型的值,来确定当前的Follow对象是否设置了边界,如果边界设置为Rect::ZERO,那么会返回false.如果设置了边界,则会返回true.

setBoundarySet函数乍一看以为是设置边界用的,仔细一看只是用来设置Follow对象是否设置了边界的。

auto fol = Follow::create(sp, Rect(0, 0, visibleSize.width * 2 - 100, visibleSize.height));
fol->setBoudarySet(false);
如果进行这样的设置,isBoudarySet返回false,实际运行中,和直接把边界设置为Rect::ZERO是一样的。

如果先把边界设为Rect::ZERO,在调用setBoudarySet将其设为true.

auto fol = Follow::create(sp, Rect::ZERO);
fol->setBoudarySet(true);

则此运行,isBoudarySet返回true,但是运行会发现,此时并不会对Node对象进行跟踪。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值