Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Cocos2d-x 3.x节点裁剪以及实现跑马灯大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

3.x节点裁剪还是很有作用的,很多功能都可以用上;


节点裁剪功能简介:


ClippingNode(裁剪节点)可以用来对节点进行裁剪,可以根据一个模板切割图片的节点,生成任何形状的节点显示。

ClippingNode是Node的子类,可以像普通节点一样放入Layer,Scene,Node中。

  • ClippingNode 原理:

    ClippingNode是利用模板遮罩来完成对Node区域裁剪的技术。如何理解ClippingNode的遮罩?看下图的例子吧。所谓模板,就是一个形状,透过该形状可看到底板上的图层,如果底板上没有任何内容,则直接看到Layer上的内容,而底板上的东西又不会妨碍Layer上的东西,即模板在底板之外的空间对于Layer来说是透明的。

  • ClippingNode 常用方法

    1. create

      可以使用static ClippingNode* create();方法创建一个ClippingNode对象。如下:

      1
      auto clipper = ClippingNode::create();

      也可以使用static ClippingNode* create(Node *stencil);方法创建;在创建的时候指定裁剪模板

      @H_673_72@ 1
      2
      auto stencil = Sprite::create( "CloseNormal.png" ); //模板节点
      clipper = ClippingNode::create(stencil);
  • setStencil 可以使用void setStencil(Node *stencil);方法设置“裁剪模板”节点。 如下:

    clipper->setStencil(stencil);//设置裁剪模板
  • seTinverted

    可以使用void seTinverted(bool inverted);方法,设置是显示被裁剪的部分,还是显示裁剪。true 显示剩余部分。false显示被剪掉部分。 如下:

    clipper->seTinverted(true//设置底板可见,显示剩余部分
  • setAlphaThreshold

    可以使用void setAlphaThreshold(GLfloat alphaThreshold);,设置alpha阈值, 只有模板(stencil)的alpha像素大于alpha阈值(alphaThreshold)时内容才会被绘制。 alpha阈值(threshold)范围应是0到1之间的浮点数。 alpha阈值(threshold)默认为1。 如下:

    clipper->setAlphaThreshold(0);//设置绘制底板的Alpha值为0
  • ClippingNode示例

    @H_874_172@
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @H_841_197@ 13
    14
    15
    @H_450_204@
    auto bg = LayerColor::create(Color4B(255,255,255));
    this ->addChild(bg,-1); //1
    auto stencil = Sprite::create( "CloseNormal.png" );
    stencil->setScale(2); //2
    auto clipper = ClippingNode::create();
    clipper->setStencil(stencil); //设置裁剪模板 //3
    clipper->seTinverted( true ); //设置底板可见
    clipper->setAlphaThreshold(0); //设置绘制底板的Alpha值为0
    ->addChild(clipper); //4
    auto content = Sprite::create( "HelloWorld.png" //被裁剪的内容
    clipper->addChild(content); //5
    clipper->setPosition(Vec2(visibleSize.width/2 + origin.x,visibleSize.height/2 + origin.y));
    1. 添加了一个白色的LayerColor作为背景层。
    2. 创建一个精灵,作为裁剪模板,并放大2倍
    3. 创建ClippingNode节点,并设置裁剪模板
    4. 设置裁剪显示,Alpha阈值,并将裁剪节点加到层中
    5. 设置被裁剪的内容
    运行效果如图:

    clipper->seTinverted(true);改为clipper->seTinverted(false);运行效果如图:

    跑马灯实现:
    跑马灯即游戏当中在特定区域滚动的公告显示;
    附上代码:
    /* 节点裁剪 */
    //DrawNode *baseDraw = DrawNode::create();
    //Vec2 triangle[4];
    //triangle[0] = Vec2(200,200);
    //triangle[1] = Vec2(200,300);
    //triangle[2] = Vec2(500,300);
    //triangle[3] = Vec2(500,200);
    //Color4F blue(0,1,0);
    //baseDraw->drawPolygon(triangle,4,blue,bluE);
    ////---------------------------------------
    //auto labelText = Label::create();
    //
    //labelText->setString("Text Label!!");
    //labelText->setScale(2.0f);
    //labelText->setPosition(600,220);
    //auto clipper = ClippingNode::create();
    //clipper->setPosition(visibleSize/2);
    //clipper->setStencil( baseDraw );
    //clipper->seTinverted(false);
    //clipper->addChild(labelText);


    //labelText->runAction(MoveTo::create(20.0f,Vec2(-600,220));
    //clipper->setAlphaThreshold(1.0f);
    //addChild(clipper);

    代码中坐标设置不对,自己改下就好了,用到了DrawNode可以自行百度使用。

    本文可自由复制和转载!

    大佬总结

    以上是大佬教程为你收集整理的Cocos2d-x 3.x节点裁剪以及实现跑马灯全部内容,希望文章能够帮你解决Cocos2d-x 3.x节点裁剪以及实现跑马灯所遇到的程序开发问题。

    如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
    如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
    标签:33.xcocoscocos2ddx以及实现节点裁剪马灯
    猜你在找的Cocos2d-x相关文章
    其他相关热搜词更多
    phpJavaPython程序员load如何string使用参数jquery开发安装listlinuxiosandroid工具javascriptcap