cocos2dx 3.8.1版本中
sprite可以实现变色操作
ImageView的只能通过修改底层来变色
GLProgram *program1 = GLProgramCache::getInstance()->getGLProgram(GLProgram::SHADER_NAME_POSITION_GRAYSCALE); GLProgram *program2 = GLProgramCache::getInstance()->getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP); Sprite* sp = Sprite::create("res/score_bg.png"); // 下面两种方法 其实是一样的 sp->setGLProgram(program1); //sp->setGLProgramState(GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP)); sp->setPosition(240,200); addChild(sp); ImageView* image = ImageView::create(); image->setPosition(ccp(240,400)); image->loadTexture("res/score_bg.png"); Scale9Sprite*sp9 = (Scale9Sprite*)image->getVirtualRenderer(); sp9->setState(Scale9Sprite::State::GRAY); //sp9->setState(Scale9Sprite::State::NORMAL); 正常状态 // 下面的方法行不通 //image->setGLProgramState(GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_GRAYSCALE)); addChild(image); auto sprite = Sprite::create("res/score_bg.png"); progress = ProgressTimer::create(sprite); progress->setPercentage(0); progress->setType(ProgressTimer::Type::RADIAL); //progress->setReverseDirection(true); 逆时针 image->addChild(progress);