2013-03-20 24 views
1

你好,我試圖用顏色填充原始圓圈,然後將顏色不透明度設置爲50%透明。 我搜索了網絡,並沒有發現任何解決方案只有cocos2d-iphone的東西。 我創建從精靈 繼承,它確實畫我圈。cocos2d-x用顏色填充圓圈並且不能使用50%不透明度(用於透明效果)

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

之前:

這 - >的addChild(雲);

只是添加一行:

雲> setOpacity(128);

不透明度值從0到255個

乾杯, 阿德里亞諾

0

繪製更好的使用DrawNode,但可惜的是,基本DrawNode不能自行處理的不透明度各種自定義的(此功能在cocos2d-4的計劃中。*)。所以,如果從DrawNode類AlphaNode inherite我們可以這樣定義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; 
} 
更好

在生產中使用之前檢查這一個性能目標平臺上,因爲其「不授權」解決方案。

啊,EAH,繪製圓有方法drawSolidCircledrawCircle