1

こんにちは、原始円を色で塗りつぶそうとしています。次に、色の不透明度を50%透明に設定します。私はネットを検索しましたが、cocos2d-iphoneのものだけの解決策は見つかりませんでした。私はスプライトから継承して作成しました、そしてそれは私に円を描きます。

void CircleSprite::draw(void)
{

 glLineWidth(2);
 cocos2d::ccDrawColor4B(0, 255, 255, 255);
 cocos2d::ccDrawCircle( ccp(100/2, 100/2), 50, CC_DEGREES_TO_RADIANS(90), 50, false);

}

#ifndef __CIRCLESPRITE_H__
#define __CIRCLESPRITE_H__

#include "cocos2d.h" 

class CircleSprite : public cocos2d::CCSprite
{
    public :
        virtual void draw(void);
    private:

};

#endif

in the main loop :
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
        CCSprite* cloud = drowCloud();
        cloud->setPosition(ccp(cloud->getContentSize().width/2,winSize.height/2));
        this->addChild(cloud);

CCSprite* HelloWorld::drowCloud()
{
    CCSprite * pCloud = new CircleSprite();
    return pCloud;
}  
4

2 に答える 2

0

あらゆる種類のカスタム描画には を使用するDrawNodeことをお勧めしますが、残念ながら、基本的な DrawNode は不透明度を単独で処理できません (この機能は cocos2d-4.* で計画中です)。したがって、クラス AlphaNode が DrawNode から継承する場合、次のように setOpacity を定義できます (cocos2dx-3-13 でテスト済み)。

void AlphaNode::setOpacity(GLubyte opac) {
    mOpacity = opac;
    if (_bufferCount) {
        for (int i = 0; i < _bufferCount; i++) {
            _buffer[i].colors.a = mOpacity;
        }
    }

    if (_bufferCountGLPoint) {
        for (int i = 0; i < _bufferCountGLPoint; i++) {
            _bufferGLPoint[i].colors.a = mOpacity;
        }
    }

    if (_bufferCountGLLine) {
        for (int i = 0; i < _bufferCountGLLine; i++) {
            _bufferGLLine[i].colors.a = mOpacity;
        }
        _dirtyGLLine = true;
    }
    _dirty = true;
}

「無許可」のソリューションであるため、本番環境で使用する前に、ターゲットプラットフォームでのパフォーマンスを確認してください。

ああ、ああ、円を描くには と のメソッドがdrawSolidCircleありdrawCircleます。

于 2016-09-13T09:34:17.800 に答える