Just a little smile ^ ^

yoyo_zeng

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  112 随笔 :: 3 文章 :: 0 评论 :: 10万 阅读

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   yoyo_zeng  阅读(284)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
历史上的今天:
2013-06-13 ModelAttribute && SessionAttributes
点击右上角即可分享
微信分享提示