Action:
auto scaleTo1=ScaleTo::create(0.1,1.2); //动作2 auto scaleTo2=ScaleTo::create(0.1,1.0);//动作1 auto endAction = CallFunc::create(std::bind(&BaseDialog::afterShowDialog, this)); //回调 this->runAction(Sequence::create(scaleTo1,scaleTo2,endAction,NULL)); //执行
EventListenerTouchOneByOne
// Make sprite1 touchable auto listener1 = EventListenerTouchOneByOne::create();//创建一个触摸监听 listener1->setSwallowTouches(true); //设置是否想下传递触摸 //通过 lambda 表达式 直接实现触摸事件的回掉方法 listener1->onTouchBegan = [](Touch* touch, Event* event){ auto target = static_cast<Sprite*>(event->getCurrentTarget()); }; listener1->onTouchMoved = [](Touch* touch, Event* event){ auto target = static_cast<Sprite*>(event->getCurrentTarget()); target->setPosition(target->getPosition() + touch->getDelta()); }; listener1->onTouchEnded = [=](Touch* touch, Event* event){ }; _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, sprite1); _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite2); _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite3); //EventListenerTouchOneByOne 表示的是单点触摸;而EventListenerTouchAllAtOnce 表示的就是多点触摸。 /* 事件监听器包含以下几种: 触摸事件 (EventListenerTouch) 键盘响应事件 (EventListenerKeyboard) 加速记录事件 (EventListenerAcceleration) 鼠标响应事件 (EventListenerMouse) 自定义事件 (EventListenerCustom) */ //删除触摸监听器 void removeEventListener(EventListener* listener); /** Removes all listeners with the same event listener type */ void removeEventListeners(EventListener::Type listenerType);
TextureCache:我们可以使用TextureCache提前异步加载纹理,等加载结束,进入到这个界面再使用这些图片速度就会非常快
Texture2D: 纹理,即图片加载入内存后供CPU和GPU操作的贴图对象。
TextureCache(纹理缓存),用于加载和管理纹理。一旦纹理加载完成,下次使用时可使用它返回之前加载的纹理,从而减少对GPU和CPU内存的占用。
//当你创建一个精灵,你一般会使用Sprite::create(pszFileName)。假如你去看Sprite::create(pszFileName)的实现方式,你将看到它将这个图片增加到纹理缓存中去了, Sprite* Sprite::create(const std::string& filename) { Sprite *sprite = new Sprite(); if (sprite && sprite->initWithFile(filename)) { sprite->autorelease(); return sprite; } _SAFE_DELETE(sprite); return nullptr; } bool Sprite::initWithFile(const std::string& filename) { ASSERT(filename.size()>0, "Invalid filename for sprite"); Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(filename); if (texture) { Rect rect = Rect::ZERO; rect.size = texture->getContentSize(); return initWithTexture(texture, rect); } // don't release here. // when load texture failed, it's better to get a "transparent" sprite then a crashed program // this->release(); return false; } //上面代码显示在控制加载纹理。一旦这个纹理被加载了,在下一时刻就会返回之前加载的纹理引用,并且减少加载的时候瞬间增加的内存。(详细API请看TextureCache API) //addImage函数会返回一个纹理Texture2D的引用,可能是新加载到内存的,也可能是之前已经存在的; Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(filename); //TextureCache类还支持异步加载资源的功能,利用addImageAsync方法。你可以很方面地给addImageAsync方法添加一个回调方法 Director::getInstance()->getTextureCache()->addImageAsync("Images/HelloWorld.png", _CALLBACK_1(TextureCacheTest::loadingCallBack, this)); void TextureCacheTest::loadingCallBack(cocos2d::Texture2D *texture) { } //removeUnusedTextures则会释放当前所有引用计数为1的纹理,即目前没有被使用的纹理 Director::getInstance()->getTextureCache()->removeUnusedTextures();