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






  • 相关阅读:
    P3180 [HAOI2016]地图
    P2787 语文1(chin1)- 理理思维
    P2221 [HAOI2012]高速公路
    P4137 Rmq Problem / mex
    P3746 [六省联考2017]组合数问题
    P2461 [SDOI2008]递归数列
    P3715 [BJOI2017]魔法咒语
    P3195 [HNOI2008]玩具装箱TOY
    Linux下的strerror是否线程安全?
    bash/shell的字符串trim实现
  • 原文地址:https://www.cnblogs.com/riskyer/p/3362374.html
Copyright © 2011-2022 走看看