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小的,那么所绘制的直线就会出现在最顶层,这样就显示出来了。






原文地址:https://www.cnblogs.com/riskyer/p/3362374.html