Just a little smile ^ ^

yoyo_zeng

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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();

 

posted on 2014-06-13 11:53  yoyo_zeng  阅读(283)  评论(0编辑  收藏  举报