CCRenderTexture * Utils::fontCreateStroke(CCLabelTTF * label,float size, ccColor3B color){ CCRenderTexture *rt = CCRenderTexture::create((int)label->getTexture()->getContentSize().width, (int)label->getTexture()->getContentSize().height); CCPoint originalPos = label->getPosition(); ccColor3B originalColor = label->getColor(); bool originalVisibility = label->isVisible(); label->setColor(color); ccBlendFunc originalBlend = label->getBlendFunc(); label->setBlendFunc((ccBlendFunc){ GL_SRC_ALPHA, GL_ONE }); //CCPoint center = ccp(label->getTexture()->getContentSize().width/2 + size, label->getTexture()->getContentSize().height/2 + size); //shadow effect offset CCPoint center = ccp(label->getTexture()->getContentSize().width/2, label->getTexture()->getContentSize().height/2); rt->begin(); for(int i = 0; i<360; i+=30){ label->setPosition(ccp(center.x + sin(CC_DEGREES_TO_RADIANS(i)) * size, center.y + cos(CC_DEGREES_TO_RADIANS(i)) * size)); label->visit(); } rt->end(); label->setPosition(originalPos); label->setColor(originalColor); label->setBlendFunc(originalBlend); label->setVisible(originalVisibility); rt->setPosition(originalPos); return rt; }
void RenderTextureZbuffer::renderScreenShot() { CCRenderTexture *texture = CCRenderTexture::renderTextureWithWidthAndHeight(512, 512); if (NULL == texture) { return; } texture->setAnchorPoint(ccp(0, 0)); texture->begin(); this->visit(); texture->end(); CCSprite *sprite = CCSprite::spriteWithTexture(texture->getSprite()->getTexture()); sprite->setPosition(ccp(256, 256)); sprite->setOpacity(182); sprite->setFlipY(1); this->addChild(sprite, 999999); sprite->setColor(ccGREEN); sprite->runAction(CCSequence::actions(CCFadeTo::actionWithDuration(2, 0), CCHide::action(), NULL)); }
CCSprite* CCSprite::createWithColor(ccColor4F bgColor, float textureWidth, float textureHeight) { CCRenderTexture *rt = CCRenderTexture::create(textureWidth, textureHeight); rt->beginWithClear(bgColor.r, bgColor.g, bgColor.b, bgColor.a); rt->end(); return CCSprite::createWithTexture(rt->getSprite()->getTexture()); }
bool GameUtil::resizeImage(const char* szInFile, const char* szOutFile, int width, int height) { CCLog("GameUtil::resizeImage - [path:%s] [W:%d] [H:%d]", szInFile, width, height); CCSprite* pOrg = CCSprite::create(szInFile); CCSize orgSize = pOrg->getContentSize(); float fScaleX = (float)width / orgSize.width; float fScaleY = (float)height / orgSize.height; float fScale = max(fScaleX, fScaleY); CCPoint ptCenter = ccp(width/2, height/2); // 세로 사진은 가로로 방향을 변경 if (orgSize.width < orgSize.height) { pOrg->setRotation(90.0f); ptCenter = ccp(height/2, width/2); } CCRenderTexture * rt = CCRenderTexture::create(width, height); pOrg->setPosition(ptCenter); pOrg->setAnchorPoint(ccp(0.5f, 0.5f)); pOrg->setScale(fScale); rt->begin(); pOrg->visit(); rt->end(); // 파일로 저장 bool bSave = rt->saveToFile(szOutFile); return bSave; }
CCTexture2D* Sky::generateTexture() { CCRenderTexture* pRenderTexture = CCRenderTexture::create(m_nTextureSize, m_nTextureSize); pRenderTexture->beginWithClear(0.55f, 0.80f, 0.86f, 1.0f); //gradient float alpha = 1.0f; ccColor4B color1 = {255, 255, 255, 0}; ccColor4B color2 = {255, 255, 255, 255}; CCLayerGradient* pLayerColor = CCLayerGradient::create(color1, color2); pLayerColor->setContentSize(CCSizeMake(m_nTextureSize, m_nTextureSize)); pLayerColor->setPosition(ccp(0, 0)); pLayerColor->visit(); //noise CCSprite* pSprite = CCSprite::create("noise.png"); pSprite->setPosition(ccp(m_nTextureSize / 2, m_nTextureSize / 2)); pSprite->setBlendFunc((ccBlendFunc){GL_DST_COLOR, GL_ZERO}); pSprite->setScale(m_nTextureSize / 512.0f); pSprite->visit(); pRenderTexture->end(); CCTexture2D* pTex = pRenderTexture->getSprite()->getTexture(); ccTexParams params = {GL_NEAREST, GL_NEAREST, GL_REPEAT, GL_REPEAT}; pTex->setTexParameters(¶ms); return pTex; }
CCSprite* GameUtil::mergeSprite(CCSprite* pOrg1, CCSprite* pOrg2) { CCPoint ptOrg1(pOrg1->getPosition()); CCPoint ptOrg2(pOrg2->getPosition()); CCRenderTexture * rt = CCRenderTexture::create((int)pOrg1->getContentSize().width, (int)pOrg1->getContentSize().height); pOrg1->setPosition(ccp(pOrg1->getContentSize().width/2, pOrg1->getContentSize().height/2)); pOrg2->setPosition(ccp(pOrg2->getContentSize().width/2, pOrg2->getContentSize().height/2)); rt->begin(); pOrg1->visit(); pOrg2->visit(); rt->end(); pOrg1->setPosition(ptOrg1); pOrg2->setPosition(ptOrg2); CCSprite *retSprite = CCSprite::createWithTexture(rt->getSprite()->getTexture()); retSprite->setFlipY(true); //CCSize sisze1 = retSprite->getContentSize(); //CCSize size2 = retSprite->getTexture()->getContentSize(); // debugging : 파일로 저장 //string sPath = CCFileUtils::sharedFileUtils()->getWriteablePath(); //sPath.c_str(); //char szSave[MAX_PATH]; //sprintf(szSave, "%ssave.png", sPath.c_str()); //bool bSave = rt->saveToFile(szSave); return retSprite; }
static CCString ScreenShoot() { CCSize size = CCDirector::sharedDirector()->getWinSize(); //定义一个屏幕大小的渲染纹理 CCRenderTexture* pScreen = CCRenderTexture::create(size.width,size.height, kCCTexture2DPixelFormat_RGBA8888); //获得当前的场景指针 CCScene* pCurScene = CCDirector::sharedDirector()->getRunningScene(); //渲染纹理开始捕捉 pScreen->begin(); //当前场景参与绘制 pCurScene->visit(); //结束捕捉 pScreen->end(); char szfile[1024]={0}; //string pathToSave = "/sdcard/download/";// string pathToSave = "ScreenShoot.png"; //sprintf(szfile,"%s%s",pathToSave.c_str(),"share.png"); //保存为png if(pScreen->saveToFile(pathToSave.c_str(), kCCImageFormatPNG)) { //CCMessageBox("saveToFile ok!", "saveToFile ok!"); } pathToSave = CCFileUtils::sharedFileUtils()->getWritablePath()+pathToSave; //保存为jpg //pScreen->saveToFile("XXXXXX.jpg", kCCImageFormatJPEG); CC_SAFE_DELETE(pScreen); return pathToSave.c_str(); }
CCSprite *Puzzle::spriteImageMask() { // 1: Create new CCRenderTexture CCRenderTexture *rt = CCRenderTexture::renderTextureWithWidthAndHeight(Puzzle::canvasSize.width, Puzzle::canvasSize.height); // 2: Call CCRenderTexture:begin rt->beginWithClear(0, 0, 0, 0); // 3: Draw into the texture CCPoint vertices[4]; glColor4ub(255, 255, 255, 255); for (int i = 0; i < numtaken; i++) { vertices[0] = ccp(taken[i].x, taken[i].y); vertices[1] = ccp(taken[i].x, taken[i].y + dimY); vertices[2] = ccp(taken[i].x + dimX, taken[i].y + dimY); vertices[3] = ccp(taken[i].x + dimX, taken[i].y); ccDrawPoly(vertices, 4, true, true); } // 4: Call CCRenderTexture:end rt->end(); // 5: Create a new Sprite from the texture CCSprite *ret = CCSprite::spriteWithTexture(rt->getSprite()->getTexture()); ret->setFlipY(true); return ret; }
//ÔÝÍ£ void CGameControler::PauseGame(int _type){ CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCRenderTexture *renderTexture = CCRenderTexture::create(visibleSize.width,visibleSize.height); renderTexture->begin(); this->getParent()->visit(); renderTexture->end(); CCDirector::sharedDirector()->pushScene(Gamepause::scene(renderTexture)); }
void AsMessageBox::initShareMessageBox(int subType){ if(!MainUser->muted) CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("openFrame.wav"); shareImageIndex = subType; //1.截屏 if (subType == 1) { CCRenderTexture* pScreen = CCRenderTexture::create(winSize.width,winSize.height); CCScene* pCurScene = CCDirector::sharedDirector()->getRunningScene(); pScreen->begin(); pCurScene->visit(); pScreen->end(); pScreen->saveToFile("shared.png",kCCImageFormatPNG); } //2.黑色底层 cover = CCLayerColor::create(ccc4(0,0,0,200)); cover->setPosition(CCPointZero); addChild(cover,0); //3.提示框底层 showbox = CCSprite::createWithSpriteFrameName("shareFrame.png"); showbox->setScaleY(1.1); showbox->setPosition(ccp(size.width/2,size.height/2+winDif*2*alpha)); cover->addChild(showbox,1); //4.提示框上的文字 CCSprite* shareWeixinSprite = CCSprite::createWithSpriteFrameName("shareWeixin.png"); CCSprite* shareWeixinSprite_s = CCSprite::createWithSpriteFrameName("shareWeixin-s.png"); CCSprite* shareWeixin1Sprite = CCSprite::createWithSpriteFrameName("shareWeixin1.png"); CCSprite* shareWeixin1Sprite_s = CCSprite::createWithSpriteFrameName("shareWeixin1-s.png"); CCSprite* closeSprite = CCSprite::createWithSpriteFrameName("closeMatchTable.png"); CCSprite* closeSprite_s = CCSprite::createWithSpriteFrameName("closeMatchTable-s.png"); CCMenuItemSprite* closeItem = CCMenuItemSprite::create(closeSprite,closeSprite_s,this,menu_selector(AsMessageBox::closeMessageBox)); CCMenuItemSprite* item1 = CCMenuItemSprite::create(shareWeixinSprite,shareWeixinSprite_s,this,menu_selector(AsMessageBox::goShare)); CCMenuItemSprite* item2 = CCMenuItemSprite::create(shareWeixin1Sprite,shareWeixin1Sprite_s,this,menu_selector(AsMessageBox::goShare)); item1->setTag(10); item2->setTag(11); item1->setPosition(ccp(size.width*18/50,size.height*10/20+winDif*2.18*alpha)); item2->setPosition(ccp(size.width*32/50,size.height*10/20+winDif*2.18*alpha)); closeItem->setPosition(ccp(size.width*5.7/7,size.height*11.5/20+winDif*2.18*alpha)); closeMenu = CCMenu::create(item1,item2,closeItem,NULL); closeMenu->setPosition(CCPointZero); addChild(closeMenu,2); //5.文字提示 CCLabelTTF* shareToIndiLabel = CCLabelTTF::create("分享给朋友","Arial Rounded MT Bold",24); CCLabelTTF* shareToCircleLabel = CCLabelTTF::create("分享到朋友圈","Arial Rounded MT Bold",24); shareToIndiLabel->setColor(ccc3(55, 55, 55)); shareToCircleLabel->setColor(ccc3(55, 55, 55)); shareToIndiLabel->setPosition(ccp(size.width*18/50,size.height*8/20+winDif*2.18*alpha)); shareToCircleLabel->setPosition(ccp(size.width*32/50,size.height*8/20+winDif*2.18*alpha)); addChild(shareToIndiLabel,7,53); addChild(shareToCircleLabel,7,54); }
CCRenderTexture* UILabelTTF::createStroke(CCLabelTTF* label, float size ,ccColor3B cor) { float RealSize = size; if(label == NULL || label->getTexture() == NULL) { return NULL; } label->setAnchorPoint(ccp(0.5, 0.5)); CCRenderTexture* rt = CCRenderTexture::create(label->getContentSize().width + RealSize*2, label->getContentSize().height + RealSize*2); rt->setAnchorPoint(ccp(0.0,0.0)); rt->setPosition(0,0); if(rt->getSprite() && rt->getSprite()->getTexture()) { rt->getSprite()->getTexture()->setAntiAliasTexParameters(); rt->getSprite()->setOpacityModifyRGB(true); } else { CCLog("UILabelTTF null texture"); } CCPoint originalPos = label->getPosition(); ccColor3B originalColor = label->getColor(); bool originalVisibility = label->isVisible(); label->setColor(cor); label->setVisible(true); ccBlendFunc originalBlend = label->getBlendFunc(); ccBlendFunc tBlendFunc = {GL_SRC_ALPHA, GL_ONE }; label->setBlendFunc(tBlendFunc); rt->clear(0, 0, 0, 0); CCPoint center = ccp(label->getContentSize().width/2 ,label->getContentSize().height /2 ); rt->begin(); label->setPosition(ccp(center.x, center.y - RealSize)); label->visit(); label->setPosition(ccp(center.x + 2*RealSize, center.y - 2*RealSize)); label->visit(); label->setPosition(ccp(center.x + RealSize, center.y)); label->visit(); label->setPosition(ccp(center.x + 2*RealSize, center.y - RealSize)); label->visit(); label->setColor(originalColor); label->setPosition(ccp(center.x,center.y)); label->visit(); rt->end(); label->setBlendFunc(originalBlend); label->setVisible(originalVisibility); label->setPosition(originalPos); // for test //char file[100]; //sprintf(file,"../../temp/%s_creat.png",label->getString()); //rt->saveToFile(file,kCCImageFormatPNG); return rt; }
void GameScene::onPause(cocos2d::CCObject *pSender) { pPauseMenu->setVisible(false); CCRenderTexture *renderTexture = CCRenderTexture::create(SCREEN_WIDTH, SCREEN_HEIGHT); renderTexture->begin(); this->getParent()->visit(); renderTexture->end(); //这里实际是通过CCRenderTexture保存当前界面(相当于截屏),然后传递给暂停界面,当成背景精灵 pPauseMenu->setVisible(true); CCDirector::sharedDirector()->pushScene(PauseScene::scene(renderTexture,true)); }
bool HelloWorld::init() { if ( !CCLayer::init() ) { return false; } CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); CCMenuItemImage *pCloseItem = CCMenuItemImage::create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(HelloWorld::menuCloseCallback)); pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 , origin.y + pCloseItem->getContentSize().height/2)); CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); pMenu->setPosition(CCPointZero); this->addChild(pMenu, 1); CCSize size = CCDirector::sharedDirector()->getWinSize(); #if 0 CCLayerColor *colorLayer = CCLayerColor::create(ccc4(0,80,80,255)); addChild(colorLayer); CCSprite *spr_premulti = CCSprite::create("Ball.png"); spr_premulti->setPosition(ccp(16,48)); CCSprite *spr_nonpremulti = CCSprite::create("Ball.png"); spr_nonpremulti->setPosition(ccp(16,16)); CCRenderTexture *rend = CCRenderTexture::create(32, 64, kCCTexture2DPixelFormat_RGBA8888); if (rend == NULL) exit(0); rend->begin(); spr_premulti->visit(); spr_nonpremulti->visit(); rend->end(); addChild(spr_nonpremulti); addChild(spr_premulti); addChild(rend); #endif scheduleUpdate(); return true; }
//label 描边 void LabelUtils::createStroke(CCLabelTTF *label, float size, ccColor3B color) { CCSize originalSize = label->getTexture()->getContentSize(); float wid = originalSize.width + size * 2; float hei = originalSize.height + size * 2; CCPoint originalPos = label->getPosition(); CCPoint originalAnchor = label->getAnchorPoint(); ccColor3B originalColor = label->getColor(); ccBlendFunc originalBlend = label->getBlendFunc(); CCNode* node = label->getChildByTag(TAG_STROKE); CCRenderTexture* rt = NULL; if(node) { rt = dynamic_cast<CCRenderTexture*>(node); if(rt) { // rt->clear(0, 0, 0, 0); //这里有问题,会有一个黑色块 // CCLOG("use pre-existing CCrenderTexture!"); rt->removeFromParentAndCleanup(true); rt = NULL; } } if(!rt) { rt = CCRenderTexture::create(wid, hei); } label->setColor(color); label->setBlendFunc((ccBlendFunc) { GL_SRC_ALPHA, GL_ONE }); // rt->setAnchorPoint(originalAnchor); //没用 CCPoint center = ccp(wid * originalAnchor.x, hei * originalAnchor.y); rt->beginWithClear(0, 0, 0, 0); for(int i=0; i<360; i+= 15) { float radians = CC_DEGREES_TO_RADIANS(i); label->cocos2d::CCNode::setPosition(center.x + sin(radians)*size, center.y + cos(radians)*size); label->visit(); } rt->end(); label->setPosition(originalPos); label->setColor(originalColor); label->setBlendFunc(originalBlend); float rtX = originalSize.width / 2 + size; float rtY = originalSize.height / 2 - size; rt->setPosition(rtX, rtY); if(rt->getParent() == NULL) label->addChild(rt, -100, TAG_STROKE); //测试 // CCLayerColor* layer = CCLayerColor::create(ccc4(0, 0, 0, 128), wid, hei); // layer->setPosition(rt->getPosition()); // label->addChild(layer); }
RenderTextureIssue937::RenderTextureIssue937() { /* * 1 2 * A: A1 A2 * * B: B1 B2 * * A1: premulti sprite * A2: premulti render * * B1: non-premulti sprite * B2: non-premulti render */ CCLayerColor *background = CCLayerColor::layerWithColor(ccc4(200,200,200,255)); addChild(background); CCSprite *spr_premulti = CCSprite::spriteWithFile("Images/fire.png"); spr_premulti->setPosition(ccp(16,48)); CCSprite *spr_nonpremulti = CCSprite::spriteWithFile("Images/fire.png"); spr_nonpremulti->setPosition(ccp(16,16)); /* A2 & B2 setup */ CCRenderTexture *rend = CCRenderTexture::renderTextureWithWidthAndHeight(32, 64); if (NULL == rend) { return; } // It's possible to modify the RenderTexture blending function by // [[rend sprite] setBlendFunc:(ccBlendFunc) {GL_ONE, GL_ONE_MINUS_SRC_ALPHA}]; rend->begin(); spr_premulti->visit(); spr_nonpremulti->visit(); rend->end(); CCSize s = CCDirector::sharedDirector()->getWinSize(); /* A1: setup */ spr_premulti->setPosition(ccp(s.width/2-16, s.height/2+16)); /* B1: setup */ spr_nonpremulti->setPosition(ccp(s.width/2-16, s.height/2-16)); rend->setPosition(ccp(s.width/2+16, s.height/2)); addChild(spr_nonpremulti); addChild(spr_premulti); addChild(rend); }
void CCTransitionRadialCCW::onEnter() { CCTransitionScene::onEnter(); // create a transparent color layer // in which we are going to add our rendertextures CCSize size = CCDirector::sharedDirector()->getWinSize(); // create the second render texture for outScene CCRenderTexture *outTexture = CCRenderTexture::renderTextureWithWidthAndHeight((int)size.width, (int)size.height); if (NULL == outTexture) { return; } outTexture->getSprite()->setAnchorPoint(ccp(0.5f,0.5f)); outTexture->setPosition(ccp(size.width/2, size.height/2)); outTexture->setAnchorPoint(ccp(0.5f,0.5f)); // render outScene to its texturebuffer outTexture->clear(0,0,0,1); outTexture->begin(); m_pOutScene->visit(); outTexture->end(); // Since we've passed the outScene to the texture we don't need it. this->hideOutShowIn(); // We need the texture in RenderTexture. CCProgressTimer *outNode = CCProgressTimer::progressWithTexture(outTexture->getSprite()->getTexture()); // but it's flipped upside down so we flip the sprite outNode->getSprite()->setFlipY(true); // Return the radial type that we want to use outNode->setType(radialType()); outNode->setPercentage(100.f); outNode->setPosition(ccp(size.width/2, size.height/2)); outNode->setAnchorPoint(ccp(0.5f,0.5f)); // create the blend action CCAction * layerAction = CCSequence::actions ( CCProgressFromTo::actionWithDuration(m_fDuration, 100.0f, 0.0f), CCCallFunc::actionWithTarget(this, callfunc_selector(CCTransitionScene::finish)), NULL ); // run the blend action outNode->runAction(layerAction); // add the layer (which contains our two rendertextures) to the scene this->addChild(outNode, 2, kSceneRadial); }
static CCSprite* createMaskSprite(CCLayerColor* base, const std::vector<CCRect>& cutoutList) { CCSize winSize = CCDirector::sharedDirector()->getWinSize(); // CCRenderTexture* rt = CCRenderTexture::create(winSize.width, winSize.height); // use a low-precision format CCRenderTexture* rt = CCRenderTexture::create(winSize.width, winSize.height, kTexture2DPixelFormat_RGBA8888); rt->setAnchorPoint(ccp(0, 0)); rt->setPosition(ccp(0, 0)); ccBlendFunc cutoutBlend = {GL_DST_ALPHA, GL_ZERO}; // render to texture rt->begin(); base->visit(); CCSprite* s = CCSprite::create("ui/1x1_b.png"); s->setAnchorPoint(ccp(0, 0)); s->setOpacity(0); for(const CCRect& cutout : cutoutList) { s->setPosition(cutout.origin); s->setScaleX(cutout.size.width * contentScale()); s->setScaleY(cutout.size.height * contentScale()); s->setBlendFunc(cutoutBlend); s->visit(); } rt->end(); // render to texture done std::string randName = std::string("mask_image_") + boost::lexical_cast<std::string>(rand()); CCImage* img = rt->newCCImage(false); img->autorelease(); CCTexture2D* tex = CCTextureCache::sharedTextureCache()->addUIImage(img, randName.c_str()); CCSprite *mask = CCSprite::createWithTexture(tex); mask->setFlipY(true); mask->setAnchorPoint(ccp(0, 0)); mask->setPosition(ccp(0, 0)); return mask; }
KDvoid RenderTextureTestDepthStencil::onEnter ( KDvoid ) { TestRenderTexture::onEnter ( ); const CCSize& s = this->getContentSize ( ); CCSprite* pSprite = CCSprite::create ( "Images/fire.png" ); pSprite->setPosition( ccp ( s.cx * 0.25f, 0 ) ); pSprite->setScale ( 10 ); CCRenderTexture* pRend = CCRenderTexture::create ( (KDuint) s.cx, (KDuint) s.cy, kCCTexture2DPixelFormat_RGBA4444, CC_GL_DEPTH24_STENCIL8 ); glStencilMask ( 0xFF ); pRend->beginWithClear ( 0, 0, 0, 0, 0, 0 ); //! mark sprite quad into stencil buffer glEnable ( GL_STENCIL_TEST ); glStencilFunc ( GL_ALWAYS, 1, 0xFF ); glStencilOp ( GL_KEEP, GL_KEEP, GL_REPLACE); glColorMask ( 0, 0, 0, 1 ); pSprite->visit ( ); //! move sprite half width and height, and draw only where not marked pSprite->setPosition ( ccpAdd ( pSprite->getPosition ( ), ccpMult ( ccp ( pSprite->getContentSize ( ).cx * pSprite->getScale ( ), pSprite->getContentSize ( ).cy * pSprite->getScale ( ) ), 0.5f ) ) ); glStencilFunc ( GL_NOTEQUAL, 1, 0xFF ); glColorMask ( 1, 1, 1, 1 ); pSprite->visit ( ); pRend->end ( ); glDisable ( GL_STENCIL_TEST ); pRend->setPosition ( ccpMid ( s ) ); this->addChild ( pRend ); }
void ADAds::fillBanner(Banner* banner) { #if defined(_DEBUG) && CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 CCRenderTexture* texture = CCRenderTexture::create(100, 100); texture->beginWithClear(0.5f, 0.5f, 0.5f, 1); texture->end(); CCSprite* s = CCSprite::createWithTexture(texture->getSprite()->getTexture()); s->setScaleX(banner->getContentSize().width/s->getContentSize().width); s->setScaleY(banner->getContentSize().height/s->getContentSize().width); banner->addChild(s); s->setAnchorPoint(ccp(0,0)); s->setPosition(ccp(0,0)); #endif if(_home_banners.size()) { //std::random_shuffle(_home_banners.begin(), _home_banners.end()); CustomBanner* home_ads = getCustomBanner(); CCMenuItem* item = CCMenuItem::create( home_ads, menu_selector(CustomBanner::onClick)); CCMenu* menu = CCMenu::create(); menu->addChild(item); banner->addChild(menu, 0, HOME_ADS_NODE_TAG); menu->setAnchorPoint(ccp(0,0)); menu->setPosition(ccp(0,0)); CCNode* banner_content = home_ads->getBanner(); CCSize content_size = banner_content->getContentSize(); CCSize zone_size = banner->getContentSize(); float scale = MIN(zone_size.width/content_size.width, zone_size.height/content_size.height); banner_content->setScale(scale); banner_content->setAnchorPoint(ccp(0, 0)); banner_content->setPosition(ccp(0,0)); item->setContentSize(content_size*scale); item->setAnchorPoint(ccp(0.5f,0.5f)); item->setPosition(zone_size*0.5f); item->addChild(banner_content); } }
void FeedAPIScene::postPhotoInUserAlbum() { CCRenderTexture *render = CCRenderTexture::create(AppDelegate::SCREEN_WIDTH, AppDelegate::SCREEN_HEIGHT); render->setPosition(ccp(AppDelegate::SCREEN_WIDTH / 2, AppDelegate::SCREEN_HEIGHT / 2)); render->begin(); CCDirector::sharedDirector()->getRunningScene()->visit(); render->end(); render->saveToFile("ScreenShot.jpg", kCCImageFormatJPEG); std::string filePathName = CCFileUtils::sharedFileUtils()->getWritablePath().append("ScreenShot.jpg"); EziSocialObject::sharedObject()->postPhoto(filePathName.c_str(), "This is photo test message"); //EziSocialObject::sharedObject()->postPhoto("ball.png", "This is photo test message"); }
CCSprite* EXDynamicTimeLayer::spriteWithColor(float alpha) { CCRenderTexture* rt = CCRenderTexture::create(mBackgroundArea.width, mBackgroundArea.height, kCCTexture2DPixelFormat_RGBA8888); ccColor4F fColor = {0.0f,0.0f,0.0f,alpha}; if (rt) { rt->beginWithClear(fColor.r, fColor.g, fColor.b, fColor.a); rt->end(); return CCSprite::createWithTexture(rt->getSprite()->getTexture()); } return NULL; }
void GameLayer::generateBackground() { int textureSize = 512; ccColor4F c = ccc4f(140.0f/255.0f,205.0f/255.0f,221.0f/255.0f, 255.0f); CCRenderTexture * rt = CCRenderTexture::create(textureSize, textureSize); rt->beginWithClear(c.r, c.g, c.b, c.a); rt->end(); setBackground(rt->getSprite()); background->removeFromParentAndCleanup(true); background->setPosition(ccp(screenW/2,screenH/2)); ccTexParams tp = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT}; background->getTexture()->setTexParameters(&tp); addChild(background); return; }
void WallSingleScene::screenshot(CCObject* pSender){ CCLog("screenshot"); CCSize size = CCDirector::sharedDirector()->getWinSize(); CCRenderTexture* texture = CCRenderTexture::create(size.width,size.height); texture->setPosition(ccp(size.width/2, size.height/2)); texture->begin(); CCDirector::sharedDirector()->getRunningScene()->visit(); texture->end(); texture->saveToFile("screenshot.png", kCCImageFormatPNG); DataTool::copyFileToSD("screenshot.png"); MyToast::showToast(this,DataTool::getChinese("save_to_sd"),TOAST_LONG); #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID string path = CCFileUtils::sharedFileUtils()->getWritablePath(); #endif }
//This is the old function cocos2d::CCSprite* HelloWorld::spriteWithColor(cocos2d::ccColor4F bgColor, float textureWidth, float textureHeight) { // 1: Create new CCRenderTexture CCRenderTexture *rt = CCRenderTexture::create(textureWidth, textureHeight); // 2: Call CCRenderTexture:begin rt->beginWithClear(bgColor.r, bgColor.g, bgColor.b, bgColor.a); this->setShaderProgram(CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionColor)); CC_NODE_DRAW_SETUP(); // 3: Draw into the texture float gradientAlpha = 0.7f; CCPoint vertices[4]; ccColor4F colors[4]; int nVertices = 0; vertices[nVertices] = ccp(0, 0); colors[nVertices++] = (ccColor4F){0, 0, 0, 0 }; vertices[nVertices] = ccp(textureWidth, 0); colors[nVertices++] = (ccColor4F){0, 0, 0, 0}; vertices[nVertices] = ccp(0, textureHeight); colors[nVertices++] = (ccColor4F){0, 0, 0, gradientAlpha}; vertices[nVertices] = ccp(textureWidth, textureHeight); colors[nVertices++] = (ccColor4F){0, 0, 0, gradientAlpha}; ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position | kCCVertexAttribFlag_Color); glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices); glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_FLOAT, GL_FALSE, 0, colors); glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST); glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)nVertices); CCSprite *noise = CCSprite::create("Noise.png"); ccBlendFunc bf = {GL_DST_COLOR, GL_ZERO}; noise->setBlendFunc(bf); noise->setPosition(ccp(textureWidth/2, textureHeight/2)); noise->visit(); // 4: Call CCRenderTexture:end rt->end(); // 5: Create a new Sprite from the texture return CCSprite::createWithTexture(rt->getSprite()->getTexture()); }
void Player::hit() { if (getSprite() == NULL) { return; } CCSize size = CCDirector::sharedDirector()->getWinSize(); Config::isPause = true; CCRenderTexture* renderTexture = CCRenderTexture::create(size.width, size.height); CCScene* temp = CCDirector::sharedDirector()->getRunningScene(); renderTexture->begin(); temp->visit(); renderTexture->end(); CCDirector::sharedDirector()->pushScene(GamePause::scene(renderTexture)); // if (m_scene != NULL) { // Config::score++; // m_scene->setScore(); // } }
void ConfigMenu::screenshot() { std::string sdcard = getSDCard(); CCSize size = CCDirector::sharedDirector()->getWinSize(); const char* imgName = "/bug_screenshot.jpg"; sdcard = sdcard.append(imgName); CCRenderTexture* pScreen = CCRenderTexture::create(size.width, size.height); CCScene* pTempScene = CCDirector::sharedDirector()->getRunningScene(); pScreen->begin(); //pTempScene->visit(); pTempScene->getChildByTag(TAG_RUNNING_LAYER)->visit(); pScreen->end(); pScreen->saveToFile(sdcard.c_str()); CC_SAFE_DELETE(pScreen); share(); CCLOG("sdcard %s", sdcard.c_str()); }
bool GameUtil::saveToFileFromSprite(CCSprite* pOrg, char* szFile) { CCPoint ptOrg(pOrg->getPosition()); CCRenderTexture * rt = CCRenderTexture::create((int)pOrg->getContentSize().width, (int)pOrg->getContentSize().height); pOrg->setPosition(ccp(pOrg->getContentSize().width/2, pOrg->getContentSize().height/2)); rt->begin(); pOrg->visit(); rt->end(); pOrg->setPosition(ptOrg); bool bSave = rt->saveToFile(szFile); return bSave; }
CAImage* CAProgress::getImage(CAImage* image) { CCRect rect; rect.origin = ccpSub(ccpMult(image->getContentSize(), 0.5f), CCPoint(0.5f, 0.5f)); rect.size = CCSize(1, 1); CAScale9ImageView *scale9Image = CAScale9ImageView::createWithImage(rect, image); scale9Image->setAnchorPoint(CCPointZero); scale9Image->setPreferredSize(this->getBounds().size); this->addSubview(scale9Image); CCRenderTexture* render = CCRenderTexture::create(this->getBounds().size.width, this->getBounds().size.height, kCAImagePixelFormat_RGBA8888); render->beginWithClear(0, 0, 0, 0); scale9Image->visit(); render->end(); scale9Image->removeFromSuperview(); return render->getSprite()->getImage(); }
CAImage* CAProgress::getImage(CAImage* image) { CCScale9Sprite *scale9Image = CCScale9Sprite::createWithImage(image); CCRect rect; rect.origin = scale9Image->getFrame().size/2; rect.origin = ccpSub(rect.origin, CCPoint(0.5f, 0.5f)); rect.size = CCSize(1, 1); scale9Image->setCapInsets(rect); scale9Image->setPreferredSize(this->getBounds().size); scale9Image->setAnchorPoint(CCPointZero); this->addSubview(scale9Image); CCRenderTexture* render = CCRenderTexture::create(this->getBounds().size.width, this->getBounds().size.height, kCCTexture2DPixelFormat_RGBA8888); render->beginWithClear(0, 0, 0, 0); scale9Image->visit(); render->end(); scale9Image->removeFromSuperview(); return render->getSprite()->getImage(); }
void Main::offscreenRendering(const char* listName, const char* atlasName, const char* spriteName){ CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache(); cache->addSpriteFramesWithFile(listName, atlasName); CCSprite* sprite = CCSprite::createWithSpriteFrameName(spriteName); CCRenderTexture* renderTexture = CCRenderTexture::create(visibleSize.width, visibleSize.height); renderTexture->setPosition(ccp(visibleSize.width/2, visibleSize.height/2)); this->addChild(renderTexture); renderTexture->beginWithClear(0, 0, 1, 1); for(int i= 0; i < 10000; i++){ sprite->setPosition(ccp( rand() % (int)visibleSize.width, rand() % (int)visibleSize.height )); sprite->visit(); } renderTexture->end(); }