zoukankan      html  css  js  c++  java
  • Cocos2d-x 重写draw方法绘制直线等图形时被遮挡覆盖问题的一种解决方案


    最近在学习过程cocos2dx的过程中需要使用到绘制直线的功能,所以我就采用了引擎中 ccDrawLine 方法,然后重写 draw 方法,在该方法中绘制直线。

    但是出现了一个问题,那就是绘制的图形被覆盖了。什么意思呢?

    我在界面中已经添加了一个sprite背景,那么我希望绘制的直线是在背景之上的,但是结果是:界面中并没有显示出直线;实际上是被sprite背景覆盖住了。

    那么怎么办呢?

    问题的分析:

    1、首先我们定位到sprite背景:

    // add "HelloWorld" splash screen"
        CCSprite* pSprite = CCSprite::create("HelloWorld.png");
    
        // position the sprite on the center of the screen
        pSprite->setPosition( ccp(size.width/2, size.height/2) );
    
        // add the sprite as a child to this layer
        this->addChild(pSprite, 1);


    注意到这个sprite添加的zOrder是1。


    2、那么你可能会想到,修改直线的zOrder大于1,不就可以解决吗?可是,绘制直线等之类是无法设置zOrder的。而实际上我们绘制的直线它的zOrder是等于0的。(为什么说是等于0呢?下面会解释)

    3、那么反过来,我们把sprite的zOrder修改的小一些,那么不就可以了吗?在前一点我提到绘制的直线它的zOrder是等于0;那么我们把sprite背景的zOrder改成小于0,不就可以了吗?

    4、试一下,我们将sprite的zOrder=-1看看。



    问题解决。


    综上,我们得出一个对该问题的解决思路:

    就是将需要绘制直线所在layer里面全部的其他节点的zOrder修改成比0小的,那么所绘制的直线就会出现在最顶层,这样就显示出来了。






  • 相关阅读:
    随感
    LIKE运算符
    数据库运行时的关键字先后顺序
    联表查询
    进程、线程、协程
    算法复杂度
    redis支持的数据类型
    面向对象编程和面向过程编程的区别总结
    判断对象的变量是否存在,isset和property_exists区别
    构造函数和析构函数
  • 原文地址:https://www.cnblogs.com/riskyer/p/3362374.html
Copyright © 2011-2022 走看看